我尝试从Python中的Tkinter.Entry获取中文字符串时出现UnicodeEncodeError

时间:2015-06-29 13:39:57

标签: unicode tkinter python-3.4

当我尝试从“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()

请帮帮我,谢谢!

1 个答案:

答案 0 :(得分:2)

您的控制台可能不支持或正确配置以支持中文字符。变化:

print(self.user_input.get())

为:

print(ascii(self.user_input.get()))

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

如果您使用的是Windows,将非Unicode程序的控制面板的Region and Language,管理,当前语言更改为中文语言环境将允许在Windows控制台中打印中文字符。

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