如何销毁小部件?

Posted

技术标签:

【中文标题】如何销毁小部件?【英文标题】:How to destroy widgets? 【发布时间】:2018-07-05 01:50:15 【问题描述】:

我想在我的 if 语句中破坏我的 tkinter 上的按钮。我尝试了几种方法并查找了一些我不理解/太复杂的方法。我试过让函数创建一个新窗口,但它没有显示。

def greenwin():
    global tkinter
    global Tk
    root = Tk()
    root.title("GAME OVER")
    root.geometry('387x387')
    gamelabel=Label(root,text="GAME OVER!GREENS
WIN!",width=33,height=15).place(x=150,y=150)
    root.mainloop
    return

我想要一个明确的方法来销毁小部件。我想要一个函数来销毁我的井字游戏的所有这些按钮。

but1=Button(root,text="",bg="white",width=11,height=5,command=colour1).place(x=0,y=0)
but2=Button(root,text="",bg="white",width=11,height=5,command=colour2).place(x=0,y=150)
but3=Button(root,text="",bg="white",width=11,height=5,command=colour3).place(x=0,y=300)
but4=Button(root,text="",bg="white",width=11,height=5,command=colour4).place(x=150,y=0)
but5=Button(root,text="",bg="white",width=11,height=5,command=colour5).place(x=150,y=150)
but6=Button(root,text="",bg="white",width=11,height=5,command=colour6).place(x=150,y=300)
but7=Button(root,text="",bg="white",width=11,height=5,command=colour7).place(x=300,y=0)
but8=Button(root,text="",bg="white",width=11,height=5,command=colour8).place(x=300,y=150)
but9=Button(root,text="",bg="white",width=11,height=5,command=colour9).place(x=300,y=300)
root.mainloop

【问题讨论】:

字面意思不就是widget.destroy()吗? @Piinthesky 我现在就上传我的代码 @Nae 不,它不起作用 这听起来像是 XY 问题。通常当我们得到这个问题时,事实证明真正的问题是“如何更改显示的框架?”,它有一个完全不同的答案。请扩展您的问题以包括用户应该体验的大图,并包括minimal reproducible example。 @gabeLevey 当然可能不是,但你问这个问题的方式也不是。我们可以继续猜测您的代码是什么样的,或者您可以准备一个minimal reproducible example 并得到一个确定和快速的答案。 【参考方案1】:
import tkinter as tk


root = tk.Tk()
any_widget = tk.Button(root, text="Press to destroy!")
any_widget['command'] = any_widget.destroy  # pay special attention to the lack of ()
# call any_widget.destroy(), button widget's command option specifically needs a
# reference to the method instead of an actual call
any_widget.pack()
root.mainloop()

【讨论】:

【参考方案2】:

试试这个:

import tkinter as tk

root = tk.Tk()
root.geometry("500x300+10+13")
root.title("Test")

b = tk.Button(root, text="click me")

def onclick(evt):
    w = evt.widget
    w.destroy()

b.bind("<Button-1>", onclick)

b.pack()
root.mainloop()

【讨论】:

你忘记了bind 还有root.mainloop() 什么是“evt”位@7stud @Novel 我应该把绑定放在哪里? @Novel,谢谢。复制/粘贴错误切断了最后 3 行。固定。

以上是关于如何销毁小部件?的主要内容,如果未能解决你的问题,请参考以下文章

dojo:通过 dom 节点销毁所有小部件

当 Android 小部件 RemoteViewService 被销毁时

如何在 Qt 的后续函数调用中访问在函数中创建的小部件

Flutter 上的小部件的 onResume() 和 onPause()

gdkmm:如何销毁 gdk 窗口?

获取元素内的所有小部件