Python 用按钮刷新tk窗口

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

当我按下按钮时,我想刷新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.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)