重置Tkinter窗口,还原小部件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重置Tkinter窗口,还原小部件相关的知识,希望对你有一定的参考价值。
我希望创建一个按钮来完全重置Tkinter窗口,就像程序从头开始运行一样。这是我目前的做法。然而,它没有像希望的那样工作。
from tkinter import *
master = Tk()
def do_something_():
#*performing a function on widget*
DoThing = Button(master, text='Do Something',command=do_something_).pack(pady=10)
clearall = Button(master, text='reset', command=resetAll).pack(pady=10)
def resetAll():
master.destroy()
master = Tk()
mainloop()
有没有办法完全重置窗口?
答案
您可以创建画布(或框架),然后使DoThing和clearall按钮将画布(或框架)作为其主窗口小部件。然后,您可以使resetAll子例程破坏画布(或框架)。然后,这将破坏所有画布的子窗口小部件。
注意:我还修复了代码中的一些语法错误(例如,在引用它之后定义了resetALL子例程。)
代码:
from tkinter import *
master = Tk()
def do_something_():
print('do something') #I added this so that i can run the code with no errors
#*performing a function on widget*
def resetAll():
canvas.destroy() #destroys the canvas and therefore all of its child-widgets too
canvas = Canvas(master)
canvas.pack()
#creates the cnvas
DoThing = Button(canvas, text='Do Something',command=do_something_).pack(pady=10)
#its master widget is now the canvas
clearall = Button(canvas, text='reset', command=resetAll).pack(pady=10)
#its master widget is now the canvas
master.mainloop()
我运行了这段代码。
在点击“重置”按钮之前,这是GUI:
点击“重置”按钮后,这就是GUI:
你可以看到它有效。画布的子窗口小部件(按钮)被破坏,因为画布被破坏了。
另一答案
您可以创建创建Frame
的函数并将小部件放在此框架中。然后你可以把框架放在窗口。
当你按下按钮然后你可以destroy()
这个框架删除所有小部件,你可以运行相同的功能再次创建小部件。或者您可以运行不同的功能来创建具有小部件的不同框架 - 因此您可以替换窗口中的内容。
from tkinter import *
# --- functions ---
def create_frame(master):
print("create frame")
frame = Frame(master)
b = Button(frame, text='Do Something')
b.pack(pady=10)
clearall = Button(frame, text='reset', command=reset_all)
clearall.pack(pady=10)
return frame
def reset_all():
global frame
frame.destroy()
frame = create_frame(master)
#frame = create_different_frame(master)
frame.pack()
# --- main ---
master = Tk()
frame = create_frame(master)
frame.pack()
mainloop()
顺便说一句:如果你做var = Widget().pack()
然后你将None
分配给var
并且你无法访问Widget - 即。你不能破坏它。你必须分两步完成
var = Widget()
var.pack()
如果您不需要访问小部件,那么您不需要变量
Widget().pack()
当您可以访问所有小部件时,您可以更改每个小部件中的设置(即明文),而不是销毁所有小部件。
以上是关于重置Tkinter窗口,还原小部件的主要内容,如果未能解决你的问题,请参考以下文章
调整窗口大小时调整 Tkinter Listbox 小部件的大小