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*

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

疑问:

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

相关推荐
wrj的博客1 小时前
python环境安装
python·学习·环境配置
Pyeako1 小时前
深度学习--BP神经网络&梯度下降&损失函数
人工智能·python·深度学习·bp神经网络·损失函数·梯度下降·正则化惩罚
摘星编程3 小时前
OpenHarmony环境下React Native:Geolocation地理围栏
python
充值修改昵称3 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
q_35488851535 小时前
AI大模型:python新能源汽车推荐系统 协同过滤推荐算法 Echarts可视化 Django框架 大数据毕业设计(源码+文档)✅
大数据·人工智能·python·机器学习·信息可视化·汽车·推荐算法
Yeats_Liao5 小时前
开源生态资源:昇腾社区ModelZoo与DeepSeek的最佳实践路径
python·深度学习·神经网络·架构·开源
被星1砸昏头5 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
love530love6 小时前
彻底解决 ComfyUI Mixlab 插件 Whisper.available False 的报错
人工智能·windows·python·whisper·win_comfyui
不解风水6 小时前
《深度学习入门:基于 Python 的理论与实现》(斋藤康毅)
人工智能·python·深度学习
偷星星的贼116 小时前
数据分析与科学计算
jvm·数据库·python