Python2.7 Tkinter在RHEL5.11报错:找不到tile包,求解决方案
解决RHEL5.11上Python2.7 Tkinter程序找不到tile包的问题
错误原因
_tkinter.TclError: can't find package tile 是因为代码中使用了ttk模块的部件(比如ttk.OptionMenu),而ttk依赖Tcl的tile包,RHEL5.11默认环境缺少这个包,或者自定义编译的Python2.7没有关联到包含tile的Tcl/Tk库。
解决方法
方法1:安装系统自带的tile依赖包
直接通过yum安装所需的Tcl/Tk扩展包:
sudo yum install tk-devel tcl-tile
安装完成后重新运行程序,若ttk能找到系统的tile包,问题即可解决。
方法2:重新编译Python2.7,关联正确的Tcl/Tk库
如果安装系统包后仍无法解决,说明之前编译的Python2.7没有正确链接到带tile的Tcl/Tk,需要重新编译:
- 先安装所有依赖:
sudo yum install tcl-devel tk-devel tcl-tile gcc make
- 下载Python2.7的源码包(推荐2.7.18,是Python2.7的最终稳定版),解压后进入源码目录:
tar zxf Python-2.7.18.tgz cd Python-2.7.18
- 配置编译参数,指定Tcl/Tk的头文件和库路径(RHEL5.11通常在
/usr/include和/usr/lib64):
./configure --prefix=/usr/local/python27 --with-tcltk-includes=/usr/include --with-tcltk-libs=/usr/lib64
- 编译并安装:
make && sudo make install
重新编译后的Python2.7会正确关联系统的Tcl/Tk库,包含tile包支持。
方法3:替换ttk部件为原生Tkinter部件(应急方案)
如果暂时无法修改系统环境或重新编译Python,可以临时将代码中的ttk部件替换为原生Tkinter部件,避开对tile包的依赖:
将代码中的:
self.oLocation = ttk.OptionMenu(self.fHostname, self.location, dict[1], *dict.values())
修改为:
import Tkinter self.oLocation = Tkinter.OptionMenu(self.fHostname, self.location, dict[1], *dict.values())
注意Python2.7中Tkinter模块首字母为大写,修改后界面会使用原生Tk样式,但能正常运行。
内容的提问来源于stack exchange,提问作者hnoman
相关产品推荐
相关产品推荐

