Python 3拉丁语到英语简单的gui按钮翻译器

时间:2014-09-29 16:24:42

标签: python user-interface python-3.x tkinter

我是Pyhton GUI的新手,现在已经玩了一段时间,使用下面的代码。下面的拉丁语到英语翻译代码的工作原理是显示三个按钮,每个按钮上都有一个拉丁文字。按下时,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()

1 个答案:

答案 0 :(得分: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个不必要的反斜杠。