如何在Python中刷新窗口

0 投票
2 回答
3496 浏览
提问于 2025-04-18 03:43

我有一个功能,可以显示图片的特征。一旦这些特征显示出来,我想为下一张图片刷新这些内容。

比如说,如果我有一个这样的窗口:

当我点击刷新按钮后,窗口应该变成这样:

enter image description here

一开始,所有特征的值都设置为零。

我该怎么做呢?我试过用grid_forget(),但这并不能达到我想要的效果。我并不想清空整个窗口,只是想清除每个输入框里的内容,还想清除标签,这样我就可以选择另一张图片了。

谢谢大家的帮助!

2 个回答

0

你只需要把输入框的默认值设置成你想要的任何值就可以了:

# if you do not use the textvariable attribute:
self.entry1.delete(0, "end")
self.entry1.insert(0, "0")
self.entry2.delete(0, "end")
self.entry2.insert(0, "0.0")

# if you DO use the textvariable attribute:
self.entry1var.set("0")
self.entry2var.set("0.0")

这些内容在Entry的手册页里都有说明,很多tkinter的教程也会提到。想要了解如何使用各种小部件,可以去effbot.org网站看看。比如,这里有他们关于输入框(Entry小部件)的页面: http://effbot.org/tkinterbook/entry.htm

2

如果你有很多输入框,比如你例子中的那样,你可以使用 winfo_children() 这个方法来获取一个对象下所有子控件的列表。然后,你可以遍历这个列表,重置和配置里面的控件:

root = Tk()

def clear_all():
    for widget in root.winfo_children():      # get all children of root
        if widget.winfo_class() == 'Entry':   # if the class is Entry
            widget.delete(0,END)              # reset its value
        elif widget.winfo_class() == 'Label': # get Label widgets
            widget.config(bg='green')         # and change them as well

# set up misc. widgets
for i in range(5):
    Entry(root).pack()
Label(root, height=10, width=100, bg='red').pack()
Button(root, text='Refresh', command=clear_all).pack()

mainloop()

撰写回答