2017-01-10 25 views
0

2つのボタンを含むKivyでポップアップを作成しました。ユーザーは、ポップアップ領域の外側(auto_dismiss = True)を押すか、「いいえ」ボタンをクリックしてポップアップを閉じることができます。 「はい」ボタンを選択すると、アプリケーション全体が終了します。ボタンを介してKivyポップアップを閉じるにはどうすればいいですか?

関連するコードを参照してください。

class ExitApp(App): 

def exit_confirmation(self): 

    # popup can only have one Widget. This can be fixed by adding a BoxLayout 

    self.box_popup = BoxLayout(orientation = 'horizontal') 

    self.box_popup.add_widget(Label(text = "Really exit?")) 

    self.box_popup.add_widget(Button(
     text = "Yes", 
     on_press = ExitApp.exit, 
     size_hint = (0.215, 0.075))) 

    self.box_popup.add_widget(Button(
     text = "No", 
     on_press = self.popup_exit.dismiss, 
     size_hint=(0.215, 0.075))) 

    self.popup_exit = Popup(title = "Exit", 
     content = self.box_popup, 
     size_hint = (0.4, 0.4), 
     auto_dismiss = True) 

    self.popup_exit.open() 

def exit(self): 

    App.get_running_app().stop() 

問題は今、「いいえ」ボタンを押すと産みます。それが押されると、コードは次のエラーで終了します。

on_press = self.popup_exit.dismiss, 

AttributeError: 'Button' object has no attribute 'popup_exit'

これをできるだけ簡単に解決できるかどうか、考えてください。

答えて

1

あなたが怠惰な機能

on_press = lambda *args: self.popup_exit.dismiss() 

でこの道を、この問題を解決することができ、ルックアップは...

場所にすでに のみボタンが押されると popup_exitをされて発生します
+0

ラムダ関数はここで役に立たなかった...ラムダ関数を使わずに私の答えを見てください。この例ではラムダをどのように使うことができるだろうか? –

+0

@ElFredあなたが失敗した行の代わりに私の答えの行を入れてください...うまくいかない場合は、新しいエラーを投稿してください... –

+0

あなたの提案はこのエラーで失敗します: "TypeError:引数(1件) " –

-1

これを試してみてください:on_press = self.popup.dismiss()on_press = self.popup_exit.dismiss

+0

正しくない場合は、評価時に呼び出されます。 –

+0

なぜですか?わたしにはできる? – tomdertech

0

変更の代わりにon_press = self.popup_exit.dismisson_press = lambda: self.popup_exit.dismiss()にあるため却下機能であり、ボタンが押されたときに呼び出される必要があります。

def exit_confirmation(self): 


    # popup can only have one Widget. This can be fixed by adding a BoxLayout 

    self.box_popup = BoxLayout(orientation = 'horizontal') 

    self.box_popup.add_widget(Label(text = "Really exit?")) 

    self.box_popup.add_widget(Button(
     text = "Yes", 
     on_press = ExitApp.exit, 
     size_hint = (0.215, 0.075))) 

    self.popup_exit = Popup(title = "Exit", 
     content = self.box_popup, 
     size_hint = (0.4, 0.4), 
     auto_dismiss = True) 

    self.box_popup.add_widget(Button(
    text = "No", 
    on_press = lambda: self.popup_exit.dismiss() , 
    size_hint=(0.215, 0.075))) 

    self.popup_exit.open() 
+1

self.popup_exit.dismiss()を呼び出さないでください。評価時に呼び出されます。ボタンが押されたときではなく、かっこを取り除く –

+1

*ラムダ*を使用しているので、定義の順序は関係ありません。 –

+0

私は答えを削除する必要があります:))。うん、私は再び編集し、それを検討:) tnx – Juggernaut

関連する問題