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*

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

疑问:

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

相关推荐
reasonsummer4 小时前
【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面
开发语言·python
Doker 多克4 小时前
Python-Django系列—日志
python·日志
苏三福5 小时前
ros2 hunmle bag 数据包转为图片数据 python版
开发语言·python·ros2humble
大神薯条老师6 小时前
Python零基础入门到高手8.4节: 元组与列表的区别
开发语言·爬虫·python·深度学习·机器学习·数据分析
z人间防沉迷k6 小时前
堆(Heap)
开发语言·数据结构·笔记·python·算法
小白学大数据7 小时前
Python爬虫如何应对网站的反爬加密策略?
开发语言·爬虫·python
Eric.Lee20217 小时前
Ubuntu shell指定conda的python环境启动脚本
python·ubuntu·conda·shell
芒果量化7 小时前
量化交易 - 网格交易策略实现与原理解析
python·算法·机器学习·金融
LetsonH7 小时前
Python工具链UV整合环境管理
开发语言·python·uv
欣然~8 小时前
基于深度学习进行运输系统优化
python·深度学习