当我尝试从“tkinter”模块中的一个小部件条目中获取中文字符串时发生了UnicodeEncodeError。我工作的操作系统是Windows 7,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()
由于我不知道如何解决问题,我尝试修改程序。这次,我不使用StringVar将字符串保存在Entry中,而是使用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()
请帮帮我,谢谢!
答案 0 :(得分:2)
您的控制台可能不支持或正确配置以支持中文字符。变化:
print(self.user_input.get())
为:
print(ascii(self.user_input.get()))
您应该看到显示正确的Unicode代码点。
如果您使用的是Windows,将非Unicode程序的控制面板的Region and Language
,管理,当前语言更改为中文语言环境将允许在Windows控制台中打印中文字符。
更好的是,在窗口小部件中显示文本而不是打印到控制台。