2015-10-20 78 views
-1

我做了這個簡單的程序,將英語翻譯成完全不同的(隨機英語),當它顯示翻譯時,它顯示空格爲{}。有什麼建議麼?爲什麼我的空間註冊爲{}

from tkinter import * 

english = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t', 
      'u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','!', 
      '\"','#','$','%','&','\'','\'','(',')','*','+',',','-','.','/',':',';','?','@','[','\\',']','^','_','`','{','|','}','~',' ', ',','\t','\n','\r','\x0b','\x0c'] 

potatish =['0','1','2','3','4','5','6','7','8','9','a','v','l','d','e','z','j','s','i','x','q','u','f','b','o','y','c','m','t', 
      'k','p','g','h','n','r','w','A','V','L','D','E','Z','J','S','I','X','Q','U','F','B','O','Y','C','M','T','K','P','G','H','N','R','W','!', 
      '\"','#','$','%','&','\'','\'','(',')','*','+',',','-','.','/',':',';','?','@','[','\\',']','^','_','`','{','|','}','~',' ', ',','\t','\n','\r','\x0b','\x0c'] 


class Program(Frame): 
    """ A Program to translate """ 

    def __init__ (self, master): 
     """Initialise the frame""" 
     Frame.__init__(self, master) 
     self.grid() 
     self.create_widgets() 

    def create_widgets(self): 
     """Buttons!!!""" 
     #Text 
     self.text = Label(self, text = "Please enter some text:") 
     self.text.grid() 

     #Field 
     self.user = Entry(self) 
     self.user.grid() 

     #Button 
     self.translate = Button(self, text = "Translate") 
     self.translate.grid() 
     self.translate["command"] = self.update_console 

     #Output 
     self.output = Label(self, text = "Output:\n") 
     self.output.grid() 

     #finished 
     self.finished = Label(self, text = "") 
     self.finished.grid() 

    def update_console(self): 
     """Updates output""" 
     self.trans = self.translatedef() 
     self.finished["text"] = self.trans 


    def translatedef(self): 
     f = [] 
     i = -1 
     j = -1 
     text = self.user.get() 
     while i != -2: 
      i+=1 
      try: 
       l = english.index(text[i]) 
       f.append(potatish[l]) 
      except: 
       while j != -2: 
        j+=1 
        try: 
         return f 
        except: 
         break 
       break 

root = Tk() 
root.title("Potatish") 
root.geometry("500x300") 

app = Program(root) 
root.mainloop() 
+0

你爲什麼不使用'字典(郵政編碼(英語,potatish))'來輸入字符映射到輸出字符?這比爲每個字符編制'english'效率更高,你可以使用'whatever.get(char,char)'來避免在你的列表中包含應該保留的字符。 – jonrsharpe

+0

感謝您的回覆,我剛剛使用了我知道如何使用,但我會嘗試使代碼更高效,並嘗試解決如何使用您建議的代碼。謝謝 :) –

回答

1

您正在將標籤的text設置爲列表而不是字符串。該清單的空白元素顯示爲Tkinter的{}

要糾正它,形成從你的列表的字符串你把它發送到標籤之前:

def update_console(self): 
    """Updates output""" 
    self.trans = ''.join(self.translatedef()) 
    self.finished["text"] = self.trans