我试图教自己Python为这可能是一个愚蠢的问题道歉但这已经让我疯了几天。我在这里看了同一主题的其他问题,但似乎还没有能够让它发挥作用。
我创建了一个顶级窗口,要求用户提示,并希望当用户按下他们选择的按钮时关闭窗口。这就是问题所在,我无法通过爱情或金钱来关闭它。我的代码包含在下面。
非常感谢您的帮助。
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
,但似乎都没有用,我尝试的事情都是;
pop.destroy()
pop.destroy
pop.exit()
pop.exit
谢谢
答案 0 :(得分:3)
destroy
对象上的调用方法确实是pop
。
但是,在yesButton
方法中,pop
指的是未知的内容。
初始化对象时,在__init__
方法中,您应将pop
项目作为self
的属性:
self.pop = Toplevel()
然后,在yesButton
方法内,调用destroy
对象上的self.pop
方法:
self.pop.destroy()
关于pop.destroy
和pop.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
方法