当我试图从Python中的Tkinter.Entry获取一个中文字符串时,UnicodeEncodeError

当我试图从Python中的Tkinter.Entry获取一个中文字符串时,UnicodeEncodeError,unicode,tkinter,python-3.4,Unicode,Tkinter,Python 3.4,当我试图从“tkinter”模块中的一个小部件条目中获取一个中文字符串时,发生了UnicodeEncodeError。我工作的操作系统是Windows7,Python的版本是Python3.4。这个小部件可以很好地处理英文字符。这是我的节目 from tkinter import * class LabelEntry(Frame): def __init__(self, parent, title, **config): Frame.__init__(self, par

当我试图从“tkinter”模块中的一个小部件条目中获取一个中文字符串时,发生了UnicodeEncodeError。我工作的操作系统是Windows7,Python的版本是Python3.4。这个小部件可以很好地处理英文字符。这是我的节目

from tkinter import *

class LabelEntry(Frame):
    def __init__(self, parent, title, **config):
        Frame.__init__(self, parent, **config)
        self.title = title
        self.user_input = StringVar(parent)
        self.pack()
        self.makeWidgets()


    def makeWidgets(self):
        Label(self, text=self.title).pack(side=LEFT)
        ent = Entry(self, textvariable=self.user_input)
        ent.pack(side=RIGHT)
        ent.bind('<Return>', self.onReturnKey)

    def onReturnKey(self, event):
        print(self.user_input.get())

if __name__ == '__main__':
    tkroot = Tk()
    widget = LabelEntry(tkroot, 'corp_title')
    widget.mainloop()
从tkinter导入*
类别标签(框架):
定义初始化(自我、父项、标题、**配置):
帧.\uuuuu init\uuuuuuu(自、父、**配置)
self.title=标题
self.user_input=StringVar(父级)
self.pack()
self.makeWidgets()
def makeWidgets(self):
标签(self,text=self.title).pack(侧面=左侧)
ent=输入(self,textvariable=self.user\u输入)
耳鼻咽喉组件(侧面=右侧)
ent.bind(“”,self.onReturnKey)
def onReturnKey(自身,事件):
打印(self.user\u input.get())
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
tkroot=Tk()
widget=LabelEntry(tkroot,“公司名称”)
widget.mainloop()
由于我不知道如何解决这个问题,我试图修改程序。这次,我没有使用StringVar将字符串保存在条目中,而是使用Entry.get()直接获取值。然而,在我输入一个中文字符串之后,同样的异常也会发生。这是新节目

from tkinter import *

class LabelEntry(Frame):
    def __init__(self, parent, title, **config):
        Frame.__init__(self, parent, **config)
        self.title = title
        self.pack()
        self.makeWidgets()  

    def makeWidgets(self):
        Label(self, text=self.title).pack(side=LEFT)
        self.ent = Entry(self)
        self.ent.pack(side=RIGHT)
        self.ent.bind('<Return>', self.onReturnKey)

    def onReturnKey(self, event):
        print(self.ent.get())

if __name__ == '__main__':
    tkroot = Tk()
    widget = LabelEntry(tkroot, 'corp_title')
    widget.mainloop()
从tkinter导入*
类别标签(框架):
定义初始化(自我、父项、标题、**配置):
帧.\uuuuu init\uuuuuuu(自、父、**配置)
self.title=标题
self.pack()
self.makeWidgets()
def makeWidgets(self):
标签(self,text=self.title).pack(侧面=左侧)
self.ent=条目(self)
自助耳鼻喉科包(侧=右)
self.ent.bind(“”,self.onReturnKey)
def onReturnKey(自身,事件):
打印(self.ent.get())
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
tkroot=Tk()
widget=LabelEntry(tkroot,“公司名称”)
widget.mainloop()

请帮帮我,谢谢

您的主机可能不支持中文字符,或者配置不正确,无法支持中文字符。更改:

print(self.user_input.get())
致:

您应该会看到显示的是正确的Unicode代码点

如果您在Windows上,将控制面板的
区域和语言
、非Unicode程序的管理、当前语言更改为中文区域设置将允许在Windows控制台中打印中文字符


更好的办法是,在小部件中显示文本,而不是打印到控制台。

我曾尝试在程序的开头使用神奇的字符串“#--coding:utf-8--”,但它不起作用。我在Entry.get()和Tkinter.StringVar().get()主题中查找了pydoc,它们都没有unicode编码选项。完全回溯?在您的代码或tkinter中的某个地方,有人试图将unicode字符串强制转换为ascii字符串,回溯应该会告诉您在哪里。我不明白。当我将程序复制到空闲状态并按F5时,它可以很好地处理中文字符串。在此之前,我尝试在CMD中运行该程序,但如上所述,失败了。很奇怪!我认为这不是语言问题?@Storm Eyes,
#coding:utf8
只声明源文件的编码。由于您的程序只包含标准ASCII字符,因此将无效。您尝试使用的unicode字符的代码点是什么?这可能是因为它超出了Tk(tkinter周围的包装器)的范围。如果字符高于(U+0000-U+FFFF),则会导致异常。这可能会通过Tk 8.7得到修复,目前它是alpha版本。
print(ascii(self.user_input.get()))