关闭顶级 Tkinter window

Closing a Toplevel Tkinter window

我正在努力自学 Python 对于这个可能很愚蠢的问题,我深表歉意,但这几天让我发疯了。我在这里查看了关于同一主题的其他问题,但似乎仍然无法解决这个问题。

我创建了一个顶级 window 来询问用户提示,并希望 window 在用户按下他们选择的按钮时关闭。这就是问题所在,我无法因为爱情或金钱而关闭它。我的代码包含在下面。

非常感谢您的帮助。

from Tkinter import *

root = Tk()

board = Frame(root)
board.pack()

square = "Chat"
cost = 2000

class buyPrompt:

         def __init__(self):
            pop = Toplevel()

            pop.title("Purchase Square")

            Msg = Message(pop, text = "Would you like to purchase %s for %d" %                         (square, cost))
            Msg.pack()


            self.yes = Button(pop, text = "Yes", command = self.yesButton)
            self.yes.pack(side = LEFT)
            self.no = Button(pop, text = "No", command = self.noButton)
            self.no.pack(side = RIGHT)

            pop.mainloop()
         def yesButton(self):
                        return True
                        pop.destroy
         def noButton(self):
                        return False

我尝试了很多不同的方法 pop.destroy 但 none 似乎有效,我尝试过的是;

pop.destroy()
pop.destroy
pop.exit()
pop.exit

谢谢

调用的方法确实是destroy,在pop对象上。

但是,在 yesButton 方法内部,pop 指的是未知的东西。

初始化你的对象时,在__init__方法中,你应该把pop项目作为self的一个属性:

self.pop = Toplevel()

然后,在您的 yesButton 方法中,调用 self.pop 对象的 destroy 方法:

self.pop.destroy()

关于pop.destroypop.destroy()的区别:

在Python中,几乎一切都是对象。所以方法也是对象。

pop.destroy时,指的是方法对象,名称为destroy,属于pop对象。它与编写 1"hello" 基本相同:它不是语句,或者如果您愿意,也不是 动作 .

当你写pop.destroy()时,你告诉Python调用pop.destroy对象,也就是执行它的__call__方法。

换句话说,写 pop.destroy 什么都不做(除了在交互式解释器中 运行 时打印 <bound method Toplevel.destroy of...> 之类的东西),而 pop.destroy() 将有效地 运行 pop.destroy 方法。