我对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)
感谢您的帮助!
答案 0 :(得分:0)
在 FileChooserListView 中,使用on_selection
事件并将*args
传递给该方法。有关详细信息,请参阅示例。
FileChooserListView:
on_selection:
app.root.selected_file(*args)
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()
答案 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