【问题标题】:Closing a Game(object) from tkinter popup从 tkinter 弹出窗口关闭游戏(对象)
【发布时间】:2016-09-23 05:11:45
【问题描述】:

我需要制作一个结束游戏的弹出窗口。弹出窗口可以在游戏类内部或外部。目前,它只关闭一个画布,当用户点击“关闭”时,我怎样才能让它自己关闭,画布和canvas2

from tkinter import *
import tkinter as tk

class Game(object):
    def __init__(self, master):
        master.title("Game")
        self._master = master
        self._canvas2 = tk.Canvas(master, bg='grey', width=300, height=50)
        self._canvas2.pack()
        self._canvas = tk.Canvas(master, bg='grey', width=300, height=200)
        self._canvas.pack()


    #if conditions met, open popup:
    self.popup()

    def popup(self):
        end = Toplevel()
        end.title("End")
        msg = Message(end, text="The game has ended")
        msg.pack()
        button = Button(end, text="Close", command=self._canvas.destroy)
        button.pack()

def main():
    root = tk.Tk()
    app = Game(root)
    root.mainloop()

if __name__ == '__main__':
    main()

我尝试过的其他选项: command=self.destroy, command=self.exit(), command=self.quit()

请注意,由于分配限制,游戏必须是一个对象。底部的初始化也是为我提供的。弹出窗口不必是顶级窗口(但它确实需要使用 tkinter),这只是我尝试实现的。

【问题讨论】:

  • 您是否尝试过创建自己的函数来删除两个画布,并从您的按钮调用该函数?
  • 刚试过,没有运气。 command=self.close(), def close(self):, self._canvas.destroy, self._canvas2.destroy 没有任何反应。还尝试将其放在课堂之外(并删除自我),但这也不起作用。已尝试在应用程序、root 上调用它......

标签: tkinter python-3.5


【解决方案1】:

解决方案是创建自己的函数以从按钮调用:

...
button = Button(end, text="Close", command=self.close)
...
def close(self):
    self._canvas.destroy()
    self._canvas2.destroy()

【讨论】:

  • 谢谢,我忘了附加括号。我发现使用这个,画布窗口被破坏了,但主窗口和弹出窗口仍然打开。致电self._master.destroy() 关闭一切。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多