2016-05-25 10 views
1

ゲームを終了するポップアップウィンドウを作る必要があります。ポップアップウィンドウは、ゲームクラスの内部または外部のいずれかにすることができます。私が試してみましたtkinterポップアップからゲーム(オブジェクト)を閉じる

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() 

その他のオプション現時点では、それが唯一のキャンバスを閉じて、私が作ることができるか、それは自分自身を閉じて、キャンバスとcanvas2は、ユーザーがクリックしたときに「閉じる」: command=self.destroycommand=self.exit()command=self.quit()

ゲームは割り当て制限のためオブジェクトでなければならないことに注意してください。最下部の初期設定も私のために提供されました。ポップアップはトップレベルのウィンドウである必要はありませんが(しかし、tkinterを使う必要があります)、これは私が実装しようとしているものです。

+0

は、両方のキャンバスを削除し、独自の関数を作成し、あなたのボタンからその関数を呼び出してみましたか? –

+0

ちょうど試しましたが、運はありません。 'command = self.close()'、 'def close(self):'、 'self._canvas.destroy、self._canvas2.destroy'何も起こりません。また、クラスの外に置いてみました(と自己を削除する)が、これも動作しません。アプリ上でそれを呼び出そうとしました、ルート.... – 009

答えて

0

ソリューションは、ボタンから呼び出すように独自の関数を作成することです:

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

ありがとう、私はかっこを追加するのを忘れました。私はこれを使用して、キャンバスウィンドウが破壊されたが、メインウィンドウとポップアップはまだ開いていることがわかりました。 'self._master.destroy()'を呼び出すとすべてが閉じられました。 – 009

関連する問題