2017-03-14 26 views
0

PopupFileChooserで開くと、ファイルを選択できますが、それ以降はPopupを閉じることができません。他のクラスのリファレンスを参照する際に誰かがどのようにしてPopupを閉じるかについてのアイデアはありますか?FileChooserからファイルを選択したときにポップアップを閉じる方法

class MyFileChooser(FileChooserListView): 

    def on_submit(*args): 
     fp=args[1][0] 

class MainScreen(BoxLayout): 

    def filebtn(self, instance): 
     self.popup = Popup(title='Select File', 
         content=MyFileChooser(), 
         size_hint=(None, None), size=(400, 400)) 
     self.popup.open() 

    def __init__(self, **kwargs): 
     super(MainScreen, self).__init__(**kwargs) 
     self.orientation = 'vertical' 
     self.btnfile = Button(text='Open File') 
     self.btnfile.bind(on_press=self.filebtn) 
     self.add_widget(self.btnfile) 

私は

class MyFileChooser(FileChooserListView): 
    def on_submit(*args): 
     fp=args[1][0] 
     popup.dismiss() 

をやってみましたしかし、それはので、私は迷ってしまいました動作しません。どんな助けもありがとう。

答えて

0

私はそれを得ました。ポップアップをグローバルとして再定義した後、MyFileChooserクラスの中から参照することができました。

def filebtn(self, instance): 
     global popup 
     popup = Popup(title='Select File', 
         content=MyFileChooser(), 
         size_hint=(None, None), size=(400,400)) 
     popup.open() 

次にMyFileChooserクラスで私は

class MyFileChooser(FileChooserListView): 

    def on_submit(*args): 
     print(args[1][0]) 
     global fp 
     fp = args[1][0] 
     print(fp) 
     popup.dismiss() 
+0

グローバルを使用することは一般的に悪い考えです。実際にそれを行う必要がある場合は、通常、変数を 'App'インスタンスの属性として渡す方が良いでしょう。これはKivyアプリケーションのどの部分からでもアクセス可能です。 – Nykakin

+0

開始のためのこの答えを見てください:http://stackoverflow.com/a/34261423/1542900 Pythonコードで 'kv'ファイルと' App.get_running_app() 'の中で' app'を使うと ' Appクラス。 – Nykakin

0

Popupは曽祖父のようにアクセスできるように思えるん:あなたはMyFileChooserクラスを使用する場合は、このコードが壊れます。もちろん、

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.popup import Popup 
from kivy.uix.button import Button 
from kivy.uix.filechooser import FileChooserListView 
from kivy.lang import Builder 

Builder.load_string(''' 
<MyWidget>: 
    TabbedPanelItem: 
     text: 'tab1' 
    TabbedPanelItem: 
     text: 'tab2' 
''') 


class MyFileChooser(FileChooserListView): 
    def on_submit(self, *args): 
     fp=args[0][0] 
     self.parent.parent.parent.dismiss() 


class MainScreen(BoxLayout): 

    def filebtn(self, instance): 
     self.popup = Popup(title='Select File', 
         content=MyFileChooser(), 
         size_hint=(None, None), size=(400, 400)) 
     self.popup.open() 

    def __init__(self, **kwargs): 
     super(MainScreen, self).__init__(**kwargs) 
     self.orientation = 'vertical' 
     self.btnfile = Button(text='Open File') 
     self.btnfile.bind(on_press=self.filebtn) 
     self.add_widget(self.btnfile) 


class MyApp(App): 
    def build(self): 
     return MainScreen() 


if __name__ == '__main__': 
    MyApp().run() 

ポップアップコンテンツとは異なる方法で

関連する問題