2015-06-29 22 views
1

當我嘗試從Entry中獲取中文字符串時發生了UnicodeEncodeError,這是tkinter模塊中的一個小部件。我工作的操作系統是Windows 7,Python的版本是Python3.4。該部件在英文字符上效果很好。這是我的程序。UnicodeEncodeError嘗試從Python中的Tkinter.Entry中獲取中文字符串

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

我試圖在程序的開頭使用魔法字符串「# - * - coding:utf-8 - * - 」,它不起作用。我已經在Entry.get()和Tkinter.StringVar()。get()這兩個主題上尋找了pydoc,他們都沒有關於unicode編碼的選項。 –

+0

完整的追溯?在你的代碼或者tkinter的某個地方,有人試圖將一個unicode字符串轉換成ascii字符串,並且回溯應該告訴你在哪裏。 – NightShadeQueen

+0

我不明白。當我將程序複製到IDLE並按下F5時,它對中文字符串很有效。在此之前,我嘗試在CMD中運行該程序,並且如上所述失敗。很奇怪!我認爲這不是語言問題? –

回答

2

您的控制檯可能不支持或未正確配置爲支持中文字符。變化:

print(self.user_input.get()) 

到:

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

您應該看到顯示正確的Unicode代碼點。

如果您使用的是Windows,將控制面板的Region and Language(非Unicode程序的當前語言)更改爲中文區域設置將允許在Windows控制檯中打印中文字符。

更好的是,在小部件中顯示文本而不是打印到控制檯。

相關問題