Kivy从文件浏览器更新输入文本

时间:2017-02-13 06:52:27

标签: python-3.x kivy designer kivy-language

我试图在Root小部件的输入框中获取文件的路径,这是我的代码

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from os.path import sep, expanduser, isdir, dirname
from kivy.garden.filebrowser import FileBrowser
from kivy.utils import platform
from kivy.uix.popup import Popup
class RootWidget(FloatLayout):
    file = 'enter zip path or select it'
    def open(self):
        print("doing")
        self.popup = Popup(title='Test popup',
                  content=self.explorer(),
                  size_hint=(None, None), size=(600, 600))
        self.popup.open()
    def explorer(self):
        if platform == 'win':
            user_path = dirname(expanduser('~')) + sep + 'Documents'
        else:
            user_path = expanduser('~') + sep + 'Documents'
        browser = FileBrowser(select_string='Select',
                          favorites=[(user_path, 'Documents')])
        browser.bind(
                on_success=self._fbrowser_success,
                on_canceled=self._fbrowser_canceled)
        return browser

    def _fbrowser_canceled(self, instance):
        print ('cancelled, Close self.')
        self.popup.dismiss()

    def _fbrowser_success(self, instance):
        print(instance.selection[0])
        self.file = instance.selection[0]
        self.popup.dismiss()

class MainApp(App):
    def build(self):
        return RootWidget()

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

这里是kivy文件代码

<RootWidget>:
    TextInput:
        text: root.file
        multiline: False
    Button:
        text: 'Load'
        on_press: root.open()

它打开文件浏览器并在关闭时正常工作,并选择将文件路径放在控制台中。但它没有更新输入框中的文字。

感谢您的回答:)

1 个答案:

答案 0 :(得分:1)

使用id而不是像这样的文本

def _fbrowser_success(self, instance):
    print(instance.selection[0])
    self.file = instance.selection[0]
    self.ids.change.text = self.file
    self.popup.dismiss()

<RootWidget>:
    TextInput:
        text: root.file
        multiline: False
        id:change
    Button:
        text: 'Load'
        on_press: root.open()