【问题标题】:How to load a filechooser dialog如何加载文件选择器对话框
【发布时间】:2018-08-14 03:47:28
【问题描述】:

我是 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 kivy kivy-language


    【解决方案1】:

    Python 代码

    1. 添加缺少的导入语句,from kivy.uix.popup import Popup
    2. 将类 LoadDialog 重命名为 Root
    3. 添加一个只有两个 ObjectProperty 的类 LoadDialog

    片段

    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. BoxLayout:之前添加根规则Root:

    片段

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

    输出

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 2015-11-29
      • 2021-08-06
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多