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



我是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()

与其为每次按下按钮创建并打包一个新标签,不如在__init__中创建一个标签,并在按下按钮时更改文本(例如,请参阅更改标签上的文本)。另外,请注意,您的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的子类(例如,请参阅Tkinter应用程序中的Inheriting from Frame or not),并根据样式指南删除了不必要的反斜杠。

最新更新