Repository navigation
Python 中 tkinter 源码安装使用与中文乱码 #12
shenweiyan
announced in
1.3-软件
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
主要是因为下面这两个原因,所以决定从源码编译安装去折腾一下 tkinter,以下是一些记录。
_tkinter not found
Python 3 源码编译安装,执行
make过程中提示_tkinter not found,如下:$ make ...... Python build finished successfully! The necessary bits to build these optional modules were not found: _tkinter中文乱码
使用 Anaconda 3(conda 4.5.11)的 tkinter python 包(conda install -c conda-forge tk)开发 GUI 界面程序过程中,发现 UI 界面出现的中文 Unicode 乱码一直没办法解决。
我们也可以确认一下是不是 Tk 本身的问题:
正常显示

中文乱码

一些参考资料:
上面几种方法测试后,问题依然存在。在 google 上一番搜索和来回测试之后,发现了几点信息:
pip install tkinter卸载或者重装都是行不通的。yum install python3-tk/python-tk解决,但对于本人来说,没用。什么是 tcl, tk, tkinter
Tcl 是"工具控制语言(Tool Control Language)"的缩写。Tk 是 Tcl "图形工具箱" 的扩展,它提供各种标准的 GUI 接口项,以利于迅速进行高级应用程序开发。
tkinter 包("Tk 接口")是 Tk GUI 工具包的标准 Python 接口。 Tk 和 tkinter 在大多数 Unix 平台以及 Windows 系统上都可用(Tk 本身不是 Python 的一部分,它在 ActiveState 中维护)。您可以通过从命令行运行
python -m tkinter来检查 tkinter 是否已正确安装在系统上。如果已经安装该命令会打开一个简单的 Tk 界面,该界面除了让我们知道 tkinter 已正确安装,并且还显示安装了哪个版本的 Tcl/Tk,因此我们可以阅读特定于该版本的 Tcl/Tk 文档。如果 tkinter 没有安装,则会提示找不到该包(注意在 Python 2 中该包包名为 Tkinter,Python 3 中为 tkinter):
接下来我们将尝试在 Python 2/3 中安装 Tcl/Tk,并重新编译 Python 2/3,已完成 Tkinter 安装(tkinter 为 Python 的标准库,标准库的安装需要重新编译 Python ?)。
ActiveTcl 安装
ActiveTcl 是 ActiveState 发布的关于 Tcl/Tk 的发行版本,该发行版本包含了最新版本的 Tk 和 Tcl 程序,我们下载其免费的社区版本进行安装即可。
参考下载链接:https://www.activestate.com/products/activetcl/downloads/
参考安装教程:https://tkdocs.com/tutorial/install.html
以下为 CentOS 6.5 下 ActiveTcl-8.6.9 的一些安装记录,仅作参考。
ActiveTcl 安装完成后,需要把 path 添加至环境变量(~/.bashrc):
Tcl/Tk
我们也可以直接去 https://sourceforge.net/projects/tcl/files/Tcl/ 直接通过源码的方式去编译安装 Tcl/Tk,尤其是当你的系统版本比较低,需要低版本的 Tcl/Tk,这种方法会比较合适。
以 tcl8.5.19-src.tar.gz/tk8.5.19-src.tar.gz 为例,下载完成后,直接解压,然后执行常规安装即可。
Python 重新编译安装
参考:What’s New In Python 3.11 - doc.python.org
Python 3
这里以 Python-3.11.6 为例,参考 Python 3.11.0 install doesn’t recognize homebrew Tcl/Tk due to --with-tcltk-libs, --with-tcltk-includes switches being removed from 3.11 - pyenv#2499,在编译安装过程中使用
TCLTK_CFLAGS和TCLTK_LIBS解决_tkinter缺失的问题。对于 Python 3.10.x (及以下版本,如 Python-3.9.18),
configure中--with-tcltk-includes和--with-tcltk-libs的具体使用参考 https://bugs.python.org/issue21887:Python 2
想要在 Python 2.7 安装 Tkinter,需要在编译过程中通过
--with-tcltk-includes和--with-tcltk-libs中指定 ActiveTcl 的头文件以及库所在路径。如果在执行编译安装过程中,出现无法找到 libXss.so.1 共享动态库报错:
CentOS 下请参考以下解决方法:
调用 Tkinter
Python 2/3 重新编译完后,执行一下下面的命令即可显示 Tk 的 ui 界面,以及相应的 Tcl/Tk 版本。
这时候,我们重新运行开头的 GUI 界面程序,可以看到中文已经正常显示:

参考资料
All reactions