Как загрузить диалог выбора файла

Я новичок в 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)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
2 381
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код Python

  1. Добавить отсутствующий оператор импорта, from kivy.uix.popup import Popup
  2. Переименуйте класс LoadDialog в Root
  3. Добавьте класс LoadDialog всего с двумя ObjectProperty

Фрагмент

from 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):

kv файл

  1. Добавьте корневое правило, Root: перед BoxLayout:

Фрагмент

Root:
    BoxLayout:
        Button:
            text: "Click me"
            on_release: root.show_load_list()

<LoadDialog>:
    BoxLayout:

Выход

Img01

Другие вопросы по теме