2017-12-22 23 views
-2

tkinterフレームから関数を呼び出す方法がわかりません。私は意図せずに閉じた場合に備えて、アプリケーションから情報を保護する方法を実装しようとしています。誰かが助けてくれますか?Tkinterフレームから関数を呼び出せません

from tkinter import Tk, Frame, Label 

class MyApp(Tk): 
    def __init__(self, *args, **kwargs): 
     Tk.__init__(self, *args, **kwargs) 
     container = Frame(self) 
     container.pack(side="top", fill="both", expand = True) 

     frame = StartPage(container, self) 
     frame.grid(row=0, column=0, sticky='nsew') 
     frame.tkraise() 

class StartPage(Frame): 
    def __init__(self, parent, controller): 
     Frame.__init__(self,parent) 
     Label(self, text="close this window from the X in the corner").grid(row=1,column=1) 

    def Stop(self):          
     print('exiting') 

app = MyApp() 

if __name__=='__main__': 
    try: 
     app.mainloop() 
    finally: 
     OpenApp = MyApp() 
     OpenClass = StartPage(parent, OpenApp) 
     OpenClass.Stop() 

tkinterを閉じるときに「停止」機能を呼び出すことはできません。私はNameErrorを取得します:name 'parent'は定義されていません。 「親」の代わりに何を置くべきですか? root.protocol( "WM_DELETE_WINDOW"、root.iconify) を使用する場合は、クラス内の関数を呼び出す必要があります。

+0

エラーを生成するコードを表示し、実際の完全なエラーを表示します。今、あなたのコードの中に 'Stop'と呼ばれるものはありません。 –

+0

"停止"は、その枠内の "X"を押してtkinterフレームを閉じると開始されます。私は意図的に閉じているときにアプリケーションを保護するメソッドを実装しようとしています。 – qode

+0

あなたが試したことを示してください。 –

答えて

1

ライン変更してみてください:に

OpenClass = StartPage(parent, OpenApp) 

を:

OpenClass = StartPage(OpenApp, OpenApp) 

class StartPage(Frame): 
     def __init__(self, parent, controller): 

は、あなたが参照を渡すしようとしているparent引数を渡す必要があります作成したことはありませんparent命名。

tkinterのアプリでは、親は通常に子を持つ別のウィジェットです。

+0

MCVEを作成すると、編集後にOPの問題が何であるか分かりましたので、非常に助けになりました。 – Nae

+0

ありがとうございました!これは問題を解決しました。 – qode

+0

@qode問題ありません。しかし、closeイベントを処理する標準的な方法については、[WM_DELETE_WINDOW](http://example.com)を参照してください。 – Nae

関連する問題