tkinter控件中文显示为unicode编码的解决办法

一、背景

最近使用python tkinter编写界面应用时,发现按钮的中文名称在windows上显示正常,但是在linux上显示为中文的unicode编码;文本输入框也是,输入中文输时,text控件上也显示为unicode编码,如下图所示;但是把这些unicode编码直接打印在控制台上,中文能正常显示。

代码如下:

python 复制代码
import tkinter as tk

class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.title("滚动条测试")
        self.geometry("450x480")

        self.text = tk.Text(self, width=66, wrap="none")
        self.text.grid(row=0, column=0, sticky="nsew")

        self.vscrollbar = tk.Scrollbar(self, orient="vertical", command=self.text.yview)
        self.vscrollbar.grid(row=0, column=1, sticky="ns")

        self.hscrollbar = tk.Scrollbar(self, orient="horizontal", command=self.text.xview)
        self.hscrollbar.grid(row=1, column=0, sticky="ew")

        self.text.config(yscrollcommand=self.vscrollbar.set, xscrollcommand=self.hscrollbar.set)

        button = tk.Button(self, text="选择源文件夹", font=('宋体', 10), width=36)
        button.grid(row=2, column=0)
        button1 = tk.Button(self, text="\u0061\u4e2d\u6587", font=('宋体', 14), width=32, command=self.print_select)
        button1.grid(row=3, column=0)


if __name__ == "__main__":
    app = App()
    app.mainloop()

二、解决过程

首先,怀疑解码的问题,在网上把编码相关的知识以及因为编解码导致的乱码问题的解决办法研究了一遍,得出结论,编解码没有问题,有编解码问题的同学可以参考:https://blog.csdn.net/qq_37453155/article/details/130372407

其次,怀疑字体不支持,但字体不支持应该是文字显示不全或者偏旁部首缺失,跟我的现象也不一直;字体的问题请参考:https://blog.csdn.net/m0_51004308/article/details/125523361

三、问题解决

由于上述都解决不了问题,转而怀疑是tk库本身不支持中文。

查看本系统python有3个版本(linux系统下有2.7和3.8,还有一个是安装anaconda时带的3.7),当前默认使用的是anaconda带的python;如是改为用3.8的python来跑这个脚本,结果提示tkinter不存在;

接下来就是解决tkinter不存在的问题了,显然,首先想到的时用pip

复制代码
xxx]$ python3.8 -m pip install tkinter
ERROR: Could not find a version that satisfies the requirement tkinter (from versions: none)
ERROR: No matching distribution found for tkinter

不起作用!

网上查了下,tkinter不能这样安装,需要安装python的tk包,最后受到https://www.cnblogs.com/lccpythonjilu/p/15361392.html的启发,安装了tkinter:
sudo yum install python38-tk*

注意,上面命令中python后面的版本号需要跟系统一致,例如我的是3.8,所以命令中是38;安装后测试tkinter库导入正常。最好再执行命令python3.8 tklearn.py,中文显示正常!

附:

解决问题过程中还对比了anaconda的python和系统的python3.8安装包的差异,发现anaconda中多个叫nltk的包,我担心它跟tk库相关,所以也安装了,命令为:python3.8 -m pip install nltk --user

另外还安装了tk相关的所有包,命令为sudo yum -y install tk*

这两个操作也不知道对上面的问题解决是不是有帮助,先列出来。如果前面解决不了问题,再把这两个命令也执行下。

疑问:

上述的界面截图中,主窗体的标题中文显示一直是正常的,这个怎么解释?有知道原因的网元请评论告知,多谢!

相关推荐
yexuhgu1 小时前
C#怎么使用Tuple元组返回多个值_C#如何简化方法返回值【基础】
jvm·数据库·python
lulu12165440781 小时前
JetBrains IDE 终极AI编程方案:CC GUI插件让Claude Code和Codex丝滑运行
java·ide·人工智能·python·ai编程
qq_414256572 小时前
JavaScript中类继承中super关键字的调用执行逻辑
jvm·数据库·python
tanis_20772 小时前
MinerU2.5-Pro 中文 PDF 识别准确率全解:OmniDocBench v1.6 权威基准数据
人工智能·python·pdf
ㄟ留恋さ寂寞2 小时前
html如何修改备注
jvm·数据库·python
2401_884454152 小时前
c++如何读取YAML格式配置文件_yaml-cpp库快速入门【详解】
jvm·数据库·python
2301_775639893 小时前
mysql升级时如何使用Ansible进行自动化部署_mysql自动化管理
jvm·数据库·python
CLX05053 小时前
怎样设置外键的更新级联操作_ON UPDATE CASCADE配置
jvm·数据库·python
Gerardisite3 小时前
企微批量群发消息指南:用 QiWe 省掉人工操作
java·python·机器人·企业微信
zjy277773 小时前
SQL Server如何实现编写表与字段注释_Navicat兼容操作步骤
jvm·数据库·python