在tkinter中,阻止同一行和同一列中的两个标签相互覆盖的好方法是什么



当按下按钮1时,我希望这个程序说"嗨",当按下按钮2时,我想让它在说嗨的同一位置说"再见",并覆盖按钮1产生的内容。然而,它并没有覆盖它,只是将两个标签合并在一起。在确保两个标签出现在同一位置的同时,有什么好方法可以防止这种情况发生?

from tkinter import *
root = Tk()
def press():
word = Label(root, text='hi')
word.grid(row=0, column=1)
def press_2():
word_2 = Label(root, text='goodbye')
word_2.grid(row=0, column=1)

button_1 = Button(root, text=1, command=press)
button_2 = Button(root, text=2, command=press_2)
button_1.grid(row=0, column=0)
button_2.grid(row=1, column=0)
root.mainloop()

您只需要使用一个Label并不断更改其文本。我们可以通过为小部件command使用lambda来有效地做到这一点。正如@Bryan Oakley所说,使用StringVar会增加不必要的开销。这是一个从我原来的略有修改的版本。在这个版本中,我们使用小部件的config方法来设置文本。作为奖励,代码采用类结构进行格式化。在tkinter中使用程序化风格最终会变成一团乱麻。考虑到所需的导入是最少的,我们直接导入它们,不需要为每个小部件加前缀。

from tkinter import Tk, Button, Label
class Application(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self,  *args, **kwargs)

lbl = Label(self, text='hi')
lbl.grid(row=0, column=1)

btn1 = Button(self, text='1',)
btn1.config(command=lambda m='hi': lbl.config(text=m))
btn1.grid(row=0, column=0)

btn2 = Button(self, text='2')
btn2.config(command=lambda m='goodbye': lbl.config(text=m))
btn2.grid(row=1, column=0)

if __name__ == "__main__":
app = Application()
app.minsize(100, 50)
app.title("My Application")
app.mainloop()
from tkinter import *
root = Tk()
def press():
label['text'] = "hi"
def press_2():
label['text'] = "goodbye"

label = Label(root)
label.grid(row=0, column=1)
button_1 = Button(root, text=1, command=press)
button_2 = Button(root, text=2, command=press_2)
button_1.grid(row=0, column=0)
button_2.grid(row=1, column=0)
root.mainloop()

首先将其放在窗口上,然后更改text配置。

更好的方法是使用小部件的config()方法。但在这里,我不知道它是否会有多大帮助。但试试

from tkinter import *
root = Tk()

def press():
word.config(text='hi')

def press_2():
word.config(text='goodbye')

button_1 = Button(root, text=1, command=press)
button_2 = Button(root, text=2, command=press_2)
button_1.grid(row=0, column=0)
button_2.grid(row=1, column=0)
word = Label(root, text='') #creating a blank label to edit later on in functions
word.grid(row=0, column=1)
root.mainloop()

最新更新