详解python tkinter模块安装过程


Posted in Python onJanuary 06, 2020

引言:

在Python3下运行Matplotlib之时,碰到了”No module named _tkinter“的问题,花费数小时进行研究解决,这里讲整个过程记录下来,并尝试分析过程中的解决思路利弊得失,以资后效,这里重点提示需要关注错误信息的分析,这个是第一现场。

环境介绍

任何技术问题的出现以及修复都是依赖于系统环境以及特定版本的,这里首先描述如下:

Ubuntu: 17.10 
Python: 3.6.1 基于virutalenv来切换不同的Python环境

tkinter的问题描述

原程序中基于matplotlib来进行绘图操作,其中在运行过程中,报出来了错误信息。由于原程序大部分无关问题本身,且日志本身比较多,这里仅仅截取关键信息:

import _tkinter # If this fails your Python may not be configured for Tk 
ImportError: No module named _tkinter

问题初步分析

用过python的朋友都知道,碰到类似的问题,比如import Error,大概率情况下都是某个包未安装,故第一反应就是某个包缺失了,于是首先进行了包和类库的查询:

pip3 search tkinter

结果发现大量的包,被匹配到,其中若干相关的包有tkinter,这些信息基本上没有帮助。

..................

tkinter.help (2.0) - Small Preview of Tkinter Widgets

tkinter3000 (1.1-20051211) - Widget Construction Kit for Tkinter

tkinterhtml (0.7) - Python wrapper for Tkhtml3 (http://tkhtml.tcl.tk/)

tkinterquickhelper (1.5.18) - Helpers for tkinter, extra windows.

tkintertable (1.2) - Extendable table class for Tkinter

.......................

于是尝试直接安装tkinter,结果没有发现tkinter包

> pip3 install tkinter

Collecting tkinter

Could not find a version that satisfies the requirement tkinter (from versions: )

No matching distribution found for tkinter

什么是tkinter, tcl ,tk

The tkinter package (“Tk interface”) is the standard Python interface to the Tk GUI toolkit. Both Tk and tkinter are available on most Unix platforms, as well as on Windows systems. (Tk itself is not part of Python; it is maintained at ActiveState.) You can check that tkinter is properly installed on your system by running python -m tkinter from the command line; this should open a window demonstrating a simple Tk interface. 
上述文件摘自Python社区:https://docs.python.org/3/library/tkinter.html

tkinter其实是Python调用tcl程序的标准Python程序,可以通过这个interface调用tcl的程序,因为在大多数的unix系统中都内置了很多的tcl程序和命令。

Tcl 是“工具控制语言(Tool Command Language)”的缩写,其面向对象为otcl语言。Tk 是 Tcl“图形工具箱”的扩展,它提供各种标准的 GUI 接口项,以利于迅速进行高级应用程序开发。

于是,执行terminal 命令:

python -m tkinter 

如果执行正确的话,可以看到如下界面指令,这里主要是指在Linux的桌面系统下: 

尝试解决问题-1

在网络上初次搜索之后,发现有人提示说python-tk/python3-tk的类库需要在操作系统层面进行安装。本次案例以Ubuntu为例, 查询其是否安装:

>sudo apt search python3-tk

正在排序... 完成
全文搜索... 完成

python3-tk/artful,now 3.6.3-0ubuntu1 amd64 [已安装]
Tkinter - Writing Tk applications with Python 3.x
python3-tk-dbg/artful 3.6.3-0ubuntu1 amd64
Tkinter - Writing Tk applications with Python 3.x (debug extension)
python3-tksnack/artful,artful,now 2.2.10.20090623-dfsg-6 all [已安装]
Sound extension to Tcl/Tk and Python/Tkinter - Python 3.x library

上述是已经安装的显示信息,如果没有安装,则需要执行,安装指令:

sudo apt install python3-tk (Ubuntu) 
yum install python3-tk (Centos)

在安装完成之后,重新执行程序,然后报出同样的错误,问题仍然存在。 
然后有发现有信息说,需要安装tk的开发类库,于是,在查询之后未安装之后,直接进行安装:

sudo apt install tk-dev (Ubuntu/Debian) 
yum install tk-devel (CentOS)

在安装之后,重新执行程序,错误仍然存在。

尝试解决问题-2

在stackoverflow上搜索一番之后,发现有人提示说,某些情况下是tcl/tk安装不完整造成的,于是就重新下来了tcl/tk的源代码包:

下载链接: http://www.tcl.tk/software/tcltk/download.html

然后分别下来两者源代码,加压缩之后,切入源代码目录:

configure 
make or make test 
sudo make install

在重新安装tck/tk之后,重新执行代码,问题依然存在。
最终解决问题

在尝试了若干次之后,自我感觉该安装和设置的选项都做了,怎么问题依然存在呢?我忽然发觉提示错误信息中的第一句关键信息:

If this fails your Python may not be configured for Tk

或许这里的问题,根本不是tkinter没有安装,或者被正确安装完成,而是没有被正确的配置好。目前tcl/tk的内容都已经安装好了,只是在python中没有配置好,但是python3-tk之类的都已经安装了,但是问题并没有被解决。如果这样,那就重新安装Python运行环境吧。

解决办法:找到python的安装路径

./configure --with-ssl #重新编译
make
make install

然后就能导入成功了

由于目前的*unix系统都是基于python 2.x系列的,如果需要使用Python3则需要自行进行代码的编译安装,于是重新基于源代码进行了编译和安装, 然后进入python的命令行,

import tkinter

提示可以正确加载。于是重新执行了之前的原程序,可以正确输出结果了。问题到此为止,已经被正确的解决。

过程总结分析

这里讲其中的得失点进行一下总结:

tkinter是一个python的接口类库,用以调用tcl/tk程序,故一般在操作系统层面会有相应的类库安装,而非仅仅依靠pip3来安装相应的python类库,比如, python3-tk

devel库的安装,在*unix系统中,在进行开发之中,很多情况下是需要devel类库安装的,这个是一个大概率的规则。

某些情况下,会出现安装不完整的情况或者安装缺失某些类库的情况。这个时候可以考虑重新覆盖安装,比如tcl/tk, python3的重新安装

重视错误信息的分析和方向性指引。 在本案例中,关键的提示信息有2个部分,其一,moulde未安装或没有找到,则从安装类库的方向进行尝试解决。 其二, 假定包已经安装,但是未被正确的配置好。 笔者在解决问题之时,首选了思路一来进行解决;在碰到各种尝试失败之后,才不得不转向其二的思路来解决。如果从两个方向同时来解决的话,或者这个问题可以被更快的解决。

###centos 安装tkinter
yum install python-tools

总结

以上所述是小编给大家介绍的python tkinter模块安装过程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python不规范的日期字符串处理类
Jun 10 Python
在Python的Django框架中更新数据库数据的方法
Jul 17 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
Python 数据结构之旋转链表
Feb 25 Python
Pycharm学习教程(1) 定制外观
May 02 Python
Python中异常重试的解决方案详解
May 05 Python
python机器学习之决策树分类详解
Dec 20 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
python包的导入方式总结
Mar 02 Python
5行Python代码实现一键批量扣图
Jun 29 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 #Python
Python3 全自动更新已安装的模块实现
Jan 06 #Python
tensorflow 只恢复部分模型参数的实例
Jan 06 #Python
春节到了 教你使用python来抢票回家
Jan 06 #Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 #Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 #Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 #Python
You might like
php jquery 多文件上传简单实例
2013/12/23 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
Python中文竖排显示的方法
2015/07/28 Python
python实现最长公共子序列
2018/05/22 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
pytorch获取模型某一层参数名及参数值方式
2019/12/30 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
python基于opencv 实现图像时钟
2021/01/04 Python
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
财务会计专业推荐信
2013/11/30 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
学校献爱心活动总结
2014/07/08 职场文书
刑事和解协议书范本
2014/11/19 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
党员民主生活会材料
2014/12/15 职场文书
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技