入门 Python GUI 开发的第一个坑

使用 Anaconda 3(conda 4.5.11)的 tkinter python 包(conda install -c conda-forge tk)开发 GUI 界面程序过程中,发现 UI 界面出现的中文 Unicode 乱码一直没办法解决。

python3.x中文编码转换的问题

https://bbs.bccn.net/thread-479560-1-1.html

Python 2.6 Tk 中文亂碼問題解決方法

http://blogkrogh.blogspot.com/2011/03/python-26-tk.html

tkinter乱码,pyqt4乱码

http://aboutweb.lofter.com/post/11743e_6f7e4a5

使用上面几种网络提供的方法测试后,乱码依然存在。在 google 上一番搜索和来回测试之后,发现了几点信息:

有人说,可能是 tcl/tk 安装不完整造成的。

tcl/tk 重装后需要对 Python 重新编译 tkinter 才能起作用。

conda install -c conda-forge tk,虽然没有任何报错,python 中import tkinter也正常,但 conda 的软件安装就像一个黑盒子,无法确认 tcl/tk 是否完整安装。

python 的 PyPI 仓库中是没有 tkinter 包的,想要使用卸载或者重装都行不通。

网上也有人说可以使用解决,但对于本人来说,没用。

什么是 tcl, tk, tkinter

Thetkinterpackage (“Tk interface”) is the standard Python interface to the Tk GUI toolkit. Both Tk andtkinterare available on most Unix platforms, as well as on Windows systems. (Tk itself is not part of Python; it is maintained at ActiveState.)

Runningfrom the command line should open a window demonstrating a simple Tk interface, letting you know thattkinteris properly installed on your system, and also showing what version of Tcl/Tk is installed, so you can read the Tcl/Tk documentation specific to that version.

Fromhttps://docs.python.org/3/library/tkinter.html

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

tkinter 包(”Tk 接口”)是 Tk GUI 工具包的标准 Python 接口。 Tk 和 tkinter 在大多数 Unix 平台以及 Windows 系统上都可用(Tk 本身不是 Python 的一部分,它在 ActiveState 中维护)。您可以通过从命令行运行来检查 tkinter 是否已正确安装在系统上。如果已经安装该命令会打开一个简单的 Tk 界面,该界面除了让我们知道 tkinter 已正确安装,并且还显示安装了哪个版本的 Tcl/Tk,因此我们可以阅读特定于该版本的 Tcl/Tk 文档。

如果 tkinter 没有安装,则会提示找不到该包(注意在 Python 2 中该包包名为Tkinter,Python 3 中为tkinter):

接下来我们将尝试在 Python 2 中安装 Tcl/Tk,并重新编译 python 2,以完成 Tkinter 安装并测试相关 UI 界面的Unicode 乱码是否正常(tkinter 为 Python 的标准库,标准库的安装需要重新编译 Python ?)。

ActiveTcl 安装

ActiveTcl 是 ActiveState 发布的关于 Tcl/Tk 的发行版本,该发行版本包含了最新版本的 Tk 和 Tcl 程序,我们下载其免费的社区版本进行安装即可。

以下为 CentOS 7 下ActiveTcl-8.6.8.0的一些安装记录,仅作参考。

ActiveTcl 安装完成后,需要把 path 添加至环境变量(~/.bashrc):

Python 重新编译安装

想要在 Python 2.7 安装 Tkinter,需要在编译过程中通过和中指定 ActiveTcl 的头文件以及库所在路径。

如果在执行编译安装过程中,出现无法找到 libXss.so.1 共享动态库报错:

CentOS 下请参考以下解决方法:

Tkinter 安装成功

Python 2 重新编译完后,执行显示 Tk 的 ui 界面,以及相应的 Tcl/Tk 版本。

这时候,我们重新运行开头的 GUI 界面程序,可以看到中文已经正常显示:

参考资料:

Download And Install Tcl: ActiveTcl,activestate.com

Installing Tk,TkDocs - Tk Tutorial - Installing Tk

bladestone,Python下 "No module named _tkinter" 问题解决过程分析,简书

wangxuwei,Python GUI编程(Tkinter)文件对话框,开源中国

·end·

—如果喜欢,快分享给你的朋友们吧—

我们一起愉快的玩耍吧

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181202A10GC700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券