Python 用按钮刷新tk窗口
当我按下按钮时,我想刷新tk窗口,但我一直在罢工。我们将不胜感激。下面是我试过的。当我更改输入框并点击刷新时,我希望tk.Label行更新,但它没有发生Python 用按钮刷新tk窗口,python,tkinter,Python,Tkinter,当我按下按钮时,我想刷新tk窗口,但我一直在罢工。我们将不胜感激。下面是我试过的。当我更改输入框并点击刷新时,我希望tk.Label行更新,但它没有发生 import Tkinter as tk class MAIN(object): def __init__(self, master, **kwargs): frame = tk.Frame(master, borderwidth=5) frame.grid() et1 = tk.Ent
import Tkinter as tk
class MAIN(object):
def __init__(self, master, **kwargs):
frame = tk.Frame(master, borderwidth=5)
frame.grid()
et1 = tk.Entry(frame)
et1.insert(0, '10')
et1.grid(row=0,column=0,sticky=tk.W)
tk.Label(frame, text = et1.get()).grid(row=1, column=0, sticky=tk.W)
refresh = tk.Button(frame, text='Refresh', command = frame.update())
refresh.grid(row=2, column=0, sticky=tk.W)
root=tk.Tk()
app=MAIN(root)
root.mainloop()
任何帮助都将不胜感激。谢谢
编辑:
我也尝试过使用update_idletasks(),但也没有成功
来自sc0tt帮助的回答:
import Tkinter as tk
class MAIN(object):
def __init__(self, master, **kwargs):
frame = tk.Frame(master, borderwidth=5)
frame.grid()
self.et1 = tk.Entry(frame)
self.et1.insert(0, 10)
self.et1.grid(row=0,column=0,sticky=tk.W)
self.label_contents = tk.StringVar()
self.label_contents.set(self.et1.get())
tk.Label(frame, textvariable=self.label_contents).grid(row=1, column=0, sticky=tk.W)
refresh = tk.Button(frame, text='Refresh', command = self.refresh_hit)
refresh.grid(row=2, column=0, sticky=tk.W)
def refresh_hit(self):
self.label_contents.set(self.et1.get())
root=tk.Tk()
app=MAIN(root)
root.mainloop()
调用update/update\u idletasks不会对您有帮助。下面是一种在按钮的命令中使用简单lambda的方法。它接受文本框的值并更改与标签关联的变量。 将Tkinter作为tk导入
class MAIN(object):
def __init__(self, master, **kwargs):
frame = tk.Frame(master, borderwidth=5)
frame.grid()
et1 = tk.Entry(frame)
et1.insert(0, 10)
et1.grid(row=0,column=0,sticky=tk.W)
label_contents = tk.StringVar()
label_contents.set(et1.get())
tk.Label(frame, textvariable=label_contents).grid(row=1, column=0, sticky=tk.W)
refresh = tk.Button(frame, text='Refresh', command = self.refresh_clicked)
refresh.grid(row=2, column=0, sticky=tk.W)
#per comments:
def refresh_clicked(event):
#update labels here
root=tk.Tk()
app=MAIN(root)
root.mainloop()
编辑:lambda被函数调用替换 这是我让这个脚本工作的唯一方法,否则我会在未定义的“self”上出错。是否有其他方法在单击的刷新菜单上添加函数 ` `
要刷新windows,请使用按钮再次调用该windows。该按钮无效。tk.标签线保持为10。还有其他想法吗?那太好了!有没有办法使刷新更通用,以适用于整个帧?我不太清楚你的意思是什么。你能进一步解释一下吗?假设我有多个入口插槽和相应的标签显示,有没有办法让刷新按钮一般地而不是显式地刷新它们?啊,在这种情况下,你可能会创建一个函数,在刷新命令中调用,在该函数中,您将设置标签以进行更新。欢迎使用SO。请正确格式化您的代码。代码的格式应该是缩进,而不是反勾号(除非它是内联代码)。我本来会编辑你的文章,但我担心我会修改你的代码,因为Python依赖于缩进。此外,请使用正确的拼写(“I”而不是“I”等)。
class MAIN(object):
def __init__(self, master, **kwargs):
global label_contents
global et1
frame = tk.Frame(master, borderwidth=5)
frame.grid()
et1 = tk.Entry(frame)
et1.insert(0, 10)
et1.grid(row=0,column=0,sticky=tk.W)
label_contents = tk.StringVar()
label_contents.set(et1.get())
tk.Label(frame, textvariable=label_contents).grid(row=1, column=0, sticky=tk.W)
refresh = tk.Button(frame, text='Refresh', command = self.refresh_clicked)
refresh.grid(row=2, column=0, sticky=tk.W)
#per comments:
def refresh_clicked(event):
global label_contents
global et1
label_contents.set(et1.get())
root=tk.Tk()
app=MAIN(root)
root.mainloop()
remove_button.grid(row=0, column=2)
refresh_button = tk.Button(master=buttons_frame, width=7, text='Refresh',
command=seeTodo)