我扩展了Tk.Label类以自定义我的需求,并且出于某种奇怪的原因,即使我在更新值时调用text
之后也不会销毁该对象。因此,基本上,我最终将widget.destroy()
的旧值放在底部,将新值放在旧值之上。
self.update
任何帮助将不胜感激。
答案 0 :(得分:2)
您的课程很奇怪。您在Label
内创建Label
,并且只显示内部标签。然后您破坏了外部标签,但不会破坏内部标签。
正确的版本是
class Label(tk.Label):
def __init__(self, root, label_name, row, col, *args, **kwargs):
tk.Label.__init__(self, *args, master=root, text=label_name, **kwargs)
self.grid(row=row, column=col)
在Python 3.x中,您可以编写
class Label(tk.Label):
def __init__(self, root, label_name, row, col, *args, **kwargs):
super().__init__(*args, master=root, text=label_name, **kwargs)
self.grid(row=row, column=col)
现在要更新文本,您可以使用
self.update["text"] = "..."
或
self.update.config(text="...")
而不是`self.update.label [“ text”] = ...
编辑:类GUI
也很奇怪。您创建了Frame
,但没有显示(不使用pack / grid),并且您将主窗口用作Label
的父窗口。对于Button
,您甚至没有设置父级,因此在某些情况下可能会得到奇怪的结果。
import tkinter as tk
class GUI(tk.Frame):
def __init__(self, master, *args, **kwargs):
super().__init__(*args, master=master, **kwargs)
# show frame
self.pack()
# add to frame (self)
self.update = Label(self, "Select a value", 0, 0)
# add to frame (self)
btn = tk.Button(self, text="Select", command=self.update_btn)
btn.grid(row=0, column=1)
def update_btn(self):
self.update['text'] = "New value"
#self.update.config(text="New value")
class Label(tk.Label):
def __init__(self, root, label_name, row, col, *args, **kwargs):
super().__init__(*args, master=root, text=label_name, **kwargs)
self.grid(row=row, column=col)
root = tk.Tk()
GUI(root)
root.mainloop()