Я новичок в Kivy, и, несмотря на то, что я прочитал пару книг, изрядное количество документации Kivy и просмотрел многочисленные примеры, у меня все еще возникают большие проблемы с разработкой структуры моей программы. Я пытаюсь заставить работать диалог выбора файлов.
Я хочу начать с простого интерфейса BoxLayout с одной кнопкой. При нажатии этой кнопки я хочу отобразить диалоговое окно выбора файла. Я взял много этого кода из одной из книг. Моя проблема в том, как вызвать виджет / класс LoadDialog. Я знаю, что моя кнопка не должна ссылаться на root.show_load_list (), но я не уверен, как мне к ней относиться. Я был бы очень благодарен за толчок в правильном направлении.
# File name: main.py
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty
from kivy.lang import Builder
class LoadDialog(FloatLayout):
load = ObjectProperty(None)
cancel = ObjectProperty(None)
def show_load_list(self):
content = LoadDialog(load=self.load_list, cancel=self.dismiss_popup)
self._popup = Popup(title = "Load a file list", content=content, size_hint=(1, 1))
self._popup.open()
def load_list(self, path, filename):
pass
def dismiss_popup(self):
self._popup.dismiss()
class LoadDialogApp(App):
pass
if __name__ == '__main__':
LoadDialogApp().run()
Мой файл kv определяется как
# File name: loaddialog.kv
BoxLayout:
Button:
text: "Click me"
on_release: root.show_load_list()
<LoadDialog>:
BoxLayout:
size: root.size
pos: root.pos
orientation: "vertical"
FileChooserListView:
id: filechooser
path: './'
BoxLayout:
size_hint_y: None
height: 30
Button:
text: "Cancel"
on_release: root.cancel()
Button:
text: "Load"
on_release: root.load(filechooser.path, filechooser.selection)






from kivy.uix.popup import PopupLoadDialog в Rootfrom kivy.uix.popup import Popup
class LoadDialog(FloatLayout):
load = ObjectProperty(None)
cancel = ObjectProperty(None)
class Root(FloatLayout):
load = ObjectProperty(None)
cancel = ObjectProperty(None)
def show_load_list(self):
Root: перед BoxLayout:Root:
BoxLayout:
Button:
text: "Click me"
on_release: root.show_load_list()
<LoadDialog>:
BoxLayout: