如何让FileChooser更新它的路径或选择[Kivy]?

时间:2018-06-08 14:26:26

标签: python-3.x kivy filechooser

我对Kivy很新,通过大量的试验和错误得到了一个相当不错的工作应用程序。

我不能为我的生活弄清楚如何让FileChooser根据我选择的内容(目录或其他方式)更新其路径。

.selection总是返回并清空列表,.path总是返回起始目录,即使我已经移动了。我在某个地方错过了一些活动,花了很多时间试图解决这个问题,并希望有人在这里帮忙。

我认为.selection.path会在我导航时更新,但它们似乎停留在第一个/默认值上。我做了testbutton只是为了看看我是否可以获得打印/更新的路径或选择。

这一切都会在他们点击另一个按钮时被触发

def testbutton(self,test,iconview,*args):
    print(test,iconview.path)

filepop=Popup(title='SaveFile')
FileChooserLayout=BoxLayout(orientation='vertical')
ButtonArea=BoxLayout(orientation='horizontal',spacing=50,size_hint=(.5,.5),pos_hint={'center_x': 0.5, 'center_y': 0.5})    
listview=FileChooserListView(path='somepath',dirselect=True)
test=listview.path
testbutton=Button(text='test',on_press=partial(self.testbutton, test,iconview))
ButtonArea.add_widget(testbutton)
FileChooserLayout.add_widget(ButtonArea)
filepop.add_widget(FileChooserLayout)

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

FileChooserListView 中,使用on_selection事件并将*args传递给该方法。有关详细信息,请参阅示例。

片段

        FileChooserListView:
            on_selection: 
                app.root.selected_file(*args)

实施例

main.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.lang import Builder

Builder.load_string('''
#:kivy 1.10.0

<SaveFile>:
    title: 'Save File'

    # FileChooserLayout
    BoxLayout:
        orientation: 'vertical'

        # ButtonArea
        BoxLayout:
            orientation: 'horizontal'
            spacing: 50
            size_hint: (.5,.5)
            pos_hint: {'center_x': 0.5, 'center_y': 0.5}

            FileChooserListView:
                on_selection: 
                    app.root.selected_file(*args)

<RootWidget>:

''')


class SaveFile(Popup):
    pass


class RootWidget(BoxLayout):

    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)
        filepop = SaveFile()
        filepop.open()

    def selected_file(self, *args):
        print("*args=", args)
        for arg in args:
            print("arg=", arg)


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


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

输出

Img01 - *args displayed

答案 1 :(得分:0)

我在事件on_submit

中找到了成功

https://kivy.org/docs/_modules/kivy/uix/filechooser.html

我必须在我的程序中创建每种类型的FileChooser它自己的类并给它on_submit函数然后我可以获得要打印的地址的响应。

class FileChooserI(FileChooserIconView):
    def on_submit(*args):
        print(args[1][0])

这篇文章确实有帮助:Kivy FileChooser doubleclick