为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2021-10-05 16:26:03
我是 tkinter 的新手,但不是 Python 的新手,我一直在努力将我的旧代码之一放在一个漂亮的 GUI 中。我当前的代码由下拉菜单组成,在您输入内容后,您可以按下一个按钮,该按钮指向另一个函数,该函数执行一些计算并输出其下方的复选框。我的问题是当我更改这些初始选择时,之前的复选框选择留在那里,而新的选择只是在它下面,这会在以后弄乱其余的代码。我一直在使用复选框在函数的开头处理 frame.grid_forget() ,但无法让它工作。我认为做这样的事情:def click1(self):    frame4=Frame(self.window)    frame4.grid()    frame4.grid_forget()    frame4.grid()将通过创建框架,对其进行网格化,将其删除并再次对其进行网格化来工作,这样它就可以在该部分有效地重置自身,但对我来说却不起作用。任何帮助表示赞赏,谢谢。
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

Tkinter 中有可用的控制变量,可让您根据变量的内容控制小部件中显示的内容。


tk.StringVar (as used below)

tk.DoubleVar can hold a Float

tk.IntVar can hold an int

这些使您可以在不破坏和重新创建的情况下更改小部件的内容。您的问题是指将链接到 IntVars 的 CheckBoxes。


下面是显示每次单击按钮时增加计数的 Label 的代码。


import tkinter

from 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()

希望这可以帮助


查看完整回答
反对 回复 2021-10-05
?
暮色呼如

TA贡献1853条经验 获得超9个赞

我还没有收到任何回复,但为了供大家参考,我又玩了一些,找到了答案:


import tkinter

from 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()

我之前试图在函数中做所有事情,但发现最好的方法是在初始化函数中创建包含框架,然后路由按钮以销毁它们,然后在您希望按钮直接路由的函数中重新创建它们到。似乎一个小弯路解决了一切,不敢相信我花了几个小时寻找答案,然后自己找到了。希望其他人能发现这有帮助!


查看完整回答
反对 回复 2021-10-05
  • 2 回答
  • 0 关注
  • 291 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号