2014-03-04 88 views
0

我嘗試使用Tkinter的在文本控件Unicode文件窗口小部件的文字,這是我的代碼寫作Unicode文件在Python

import codecs 
def callback(): 
    matric_name = entry.get() 
    with open(matric_name.rstrip('\n')+".txt", 'r') as content_file: 
     content = content_file.read() 

    #myFile=file(matric_name.rstrip('\n')+".txt") # get a file handle 
    # myText= myFile.read() # read the file to variable 
    # f = codecs.open(matric_name.rstrip('\n')+".txt", mode="r", encoding="iso-8859-1") 
    # myText= f.read() 
    # print myText 
    # myFile.close() 

    print content 
    mytext.insert(0.0,content) 

它是否能正確打印,但它不是寫正確地控件文本

控件上的輸出是ÿþS

+0

您的縮進被搞砸了,很難理解 –

+0

@BryanOakley對不起,縮進,現在我改正了 – yagyavrat

回答

2

您需要使用正確的編碼讀取文件。這可以使用編解碼器模塊完成。一旦你正確讀取了數據,Tk文本小部件將接受unicode字符串。作爲一個例子,它會將unicode文件加載到文本小部件中。將unicode文本文件名稱作爲命令行參數。

#!/usr/bin/python 
import sys,codecs 
from Tkinter import * 

class App(Frame): 
    def __init__(self, parent = None): 
     Frame.__init__(self, parent) 
     self.grid() 
     self.text = Text(self) 
     self.text.grid() 

    def Load(self,filename): 
     with codecs.open(filename, encoding='utf-16') as f: 
      for line in f: 
       self.text.insert('end', line) 

def main(argv = None): 
    if argv is None: 
     argv = sys.argv 
    app = App() 
    if len(argv) > 1: 
     app.after_idle(lambda: app.Load(argv[1])) 
    app.mainloop() 

if __name__=='__main__': 
    sys.exit(main())