Как мне сделать так, чтобы FileChooser обновлял его путь или выделение [Kivy]? - PullRequest
0 голосов
/ 08 июня 2018

Я очень новичок в 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 голосов
/ 08 июня 2018

Я нашел успех с событием 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

0 голосов
/ 08 июня 2018

В 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

...