1

我正在尝试自学 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

谢谢

4

1 回答 1

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,你指的是方法对象,named destroy,并且属于这个pop对象。1它与写or基本相同"hello":它不是一个陈述,或者如果你愿意,也不是一个动作

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

换句话说,编写pop.destroy不会做任何事情(除了在交互式解释器中运行时打印一些东西<bound method Toplevel.destroy of...>),而pop.destroy()将有效地运行该pop.destroy方法。

于 2016-12-29T11:17:22.873 回答