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
-
主要是因为下面这两个原因,所以决定从源码编译安装去折腾一下 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 界面程序,可以看到中文已经正常显示:
参考资料
Beta Was this translation helpful? Give feedback.
All reactions