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*

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

疑问:

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

相关推荐
梧桐树04293 小时前
python常用内建模块:collections
python
Dream_Snowar3 小时前
速通Python 第三节
开发语言·python
蓝天星空4 小时前
Python调用open ai接口
人工智能·python
jasmine s4 小时前
Pandas
开发语言·python
郭wes代码4 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
leaf_leaves_leaf4 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零15 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
404NooFound5 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
天天要nx5 小时前
D102【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest
minstbe5 小时前
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
人工智能·python·支持向量机