2014-09-29 121 views
0

我是Pyhton GUI的新手,一段時間以來一直在玩下面的代碼。下面的拉丁語到英語翻譯器的代碼通過顯示三個按鈕來實現,每個按鈕上都有一個拉丁文字。按下時,GUI的標籤中會出現英文等同物。我想讓輸出顯示在「英文翻譯」的右邊,但如果按下另一個按鍵,則會被另一個輸出替換。取而代之的是,在按下幾個按鈕後,它會一遍又一遍地顯示翻譯,從而導致框區域變得越來越大。有沒有辦法只是交換輸出而不是以前的輸出?提前感謝您,我很感謝任何幫助將我轉向解決方案。Python 3拉丁語譯成英語簡單的gui按鈕翻譯器

import tkinter 
import tkinter.messagebox 

class LatConvGUI: 
    def __init__(self): 

     self.main_window = tkinter.Tk() 
     self.top_frame = tkinter.Frame() 
     self.bottom_frame = tkinter.Frame() 
     self.prompt_label = tkinter.Label(self.top_frame, \ 
        text='English Translation is:') 

     self.prompt_label.pack(side='left') 

     self.sin_button = tkinter.Button(self.bottom_frame, \ 
            text='sinister', \ 
            command=self.convert) 

     self.dex_button = tkinter.Button(self.bottom_frame, \ 
           text='dexter', \ 
           command=self.convert2) 

     self.med_button = tkinter.Button(self.bottom_frame, \ 
           text='medium', \ 
           command=self.convert3) 

     self.label2 = tkinter.Label(self.bottom_frame, \ 
            text='Latin word is:') 

     self.label2.pack(side='left') 

     self.sin_button.pack(side='left') 
     self.dex_button.pack(side='left') 
     self.med_button.pack(side='left') 
     self.top_frame.pack() 
     self.bottom_frame.pack() 

     tkinter.mainloop() 

    def convert(self): 

     self.label1 = tkinter.Label(self.top_frame, \ 
            text='left') 
     self.label1.pack(side = 'top') 

    def convert2(self): 

     self.label3 = tkinter.Label(self.top_frame, \ 
            text='right') 
     self.label3.pack(side = 'top') 

    def convert3(self): 

     self.label4 = tkinter.Label(self.top_frame, \ 
            text='center') 
     self.label4.pack(side = 'top') 


eng_conv = LatConvGUI() 

回答

2

而不是創建和打包爲每個按鈕按下一個新的標籤,在__init__創建單個標籤,並改變文本(參見例如Changing the text on a label)按鈕被按下時。另外請注意,你的convert函數是微不足道的,幾乎相同,因此可以完全使用functools.partial來分解。單按鈕的例子,讓你開始:

from functools import partial 
import tkinter 
import tkinter.messagebox 

class LatConvGUI(tkinter.Tk): 

    def __init__(self): 
     super().__init__() 

     self.top_frame = tkinter.Frame(self) 
     self.bottom_frame = tkinter.Frame(self) 

     self.prompt_label = tkinter.Label(self.top_frame, 
              text='English Translation is:') 
     self.prompt_label.pack(side='left') 

     self.label1 = tkinter.Label(self.top_frame, text='') 
     self.label1.pack(side='top') 

     self.label2 = tkinter.Label(self.bottom_frame, 
            text='Latin word is:') 
     self.label2.pack(side='left') 

     self.sin_button = tkinter.Button(self.bottom_frame, 
             text='sinister', 
             command=partial(self.label1.config, 
                 text='left')) 
     self.sin_button.pack(side='left') 

     self.top_frame.pack() 
     self.bottom_frame.pack() 


eng_conv = LatConvGUI() 
eng_conv.mainloop() 

partial命令等同於

 ..., command=sin_command) 

... 

def sin_command(self): 
    self.label1.config(text='left') 

請注意,我已經採取了更多的面向對象的方法,使得GUI的Tk一個子類(請參閱例如Inheriting from Frame or not in a Tkinter application),並已按照the style guide刪除了不必要的反斜槓。

+0

您提供的「Python 3 tkinter更改標籤文本」鏈接對我理解該概念非常有幫助。感謝您花時間指出我的方向。 – WillyJoe 2014-09-29 16:48:43