【问题标题】:Closing a Toplevel Tkinter window关闭顶层 Tkinter 窗口
【发布时间】:2016-12-29 11:13:25
【问题描述】:

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

谢谢

【问题讨论】:

    标签: python tkinter toplevel


    【解决方案1】:

    调用的方法确实是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" 基本相同:这不是陈述,或者如果您愿意,也不是action

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

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

    【讨论】:

    • 非常感谢您如此清晰简洁的回答右腿,这解决了我的问题,也有助于我在调用方法时的未来知识。很好的答案,也很快,再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多