猿问

Python Tkinter 在更新输出时删除以前的小部件

我是 tkinter 的新手,但不是 Python 的新手,我一直在努力将我的旧代码之一放在一个漂亮的 GUI 中。我当前的代码由下拉菜单组成,在您输入内容后,您可以按下一个按钮,该按钮指向另一个函数,该函数执行一些计算并输出其下方的复选框。


我的问题是当我更改这些初始选择时,之前的复选框选择留在那里,而新的选择只是在它下面,这会在以后弄乱其余的代码。我一直在使用复选框在函数的开头处理 frame.grid_forget() ,但无法让它工作。


我认为做这样的事情:


def click1(self):

    frame4=Frame(self.window)

    frame4.grid()

    frame4.grid_forget()

    frame4.grid()

将通过创建框架,对其进行网格化,将其删除并再次对其进行网格化来工作,这样它就可以在该部分有效地重置自身,但对我来说却不起作用。任何帮助表示赞赏,谢谢。


慕哥6287543
浏览 293回答 2
2回答

波斯汪

Tkinter 中有可用的控制变量,可让您根据变量的内容控制小部件中显示的内容。tk.StringVar (as used below)tk.DoubleVar can hold a Floattk.IntVar can hold an int这些使您可以在不破坏和重新创建的情况下更改小部件的内容。您的问题是指将链接到 IntVars 的 CheckBoxes。下面是显示每次单击按钮时增加计数的 Label 的代码。import tkinterfrom tkinter import *class GUI:    def __init__(self):        self.window=Tk()        self.frame=Frame(self.window)        self.frame.grid()        # Define something to change on click.        self.count=0        # Create a StringVr to hold it.        self.label_text=StringVar()        # Link to a label        self.label_text.set("Count = "+str(self.count))        Label(self.frame, textvariable=self.label_text).grid()        Button(self.frame,text="Click", command=self.on_click).grid()        tkinter.mainloop()    def on_click(self):        # Update Count and the label on click         self.count+=1        self.label_text.set("Count = "+str(self.count))GUI()希望这可以帮助

暮色呼如

我还没有收到任何回复,但为了供大家参考,我又玩了一些,找到了答案:import tkinterfrom tkinter import *class GUI:  def __init__(self):    self.window=Tk()    self.frame=Frame(self.window)    self.inner=Frame(self.window)    self.frame.grid()    self.inner.grid()    Button(self.frame,text="Click",command=self.clear).grid()    tkinter.mainloop()  def click(self):    self.inner=Frame(self.frame)    self.inner.grid()    Label(self.inner,text='Hello!').grid()  def clear(self):    self.inner.destroy()    self.click()GUI()我之前试图在函数中做所有事情,但发现最好的方法是在初始化函数中创建包含框架,然后路由按钮以销毁它们,然后在您希望按钮直接路由的函数中重新创建它们到。似乎一个小弯路解决了一切,不敢相信我花了几个小时寻找答案,然后自己找到了。希望其他人能发现这有帮助!
随时随地看视频慕课网APP

相关分类

Python
我要回答