【问题标题】:Kivy: How select directory by FileChooser without kv language?Kivy:如何在没有 kv 语言的情况下通过 FileChooser 选择目录?
【发布时间】:2018-01-06 21:36:35
【问题描述】:

Kivy manual 中是使用带有 kivy 语言的 FileChooser 的示例。我只想在 python 代码中使用 FileChooser。当我用鼠标标记目录时,按下按钮 Select Dir 并且实际值在变量 FileChooser.path 中。不使用此按钮的选择没有结果。 在示例中的 kv 文件中使用了事件 on_selection,我将此事件与我的函数绑定,但没有效果。

我的问题:

  1. 如何仅使用鼠标获得路径值?
  2. 哪个类使用事件on_selection

谢谢!

class Explorer(BoxLayout):   
    def __init__(self, **kwargs):
        super(Explorer,self).__init__(**kwargs)

        self.orientation = 'vertical'
        self.fichoo = FileChooserListView(size_hint_y = 0.8)
        self.add_widget(self.fichoo)

        control   = GridLayout(cols = 5, row_force_default=True, row_default_height=35, size_hint_y = 0.14)
        lbl_dir   = Label(text = 'Folder',size_hint_x = None, width = 80)
        self.tein_dir  = TextInput(size_hint_x = None, width = 350)
        bt_dir = Button(text = 'Select Dir',size_hint_x = None, width = 80)
        bt_dir.bind(on_release =self.on_but_select)

        self.fichoo.bind(on_selection = self.on_mouse_select)

        control.add_widget(lbl_dir)
        control.add_widget(self.tein_dir)
        control.add_widget(bt_dir)

        self.add_widget(control)

        return

    def on_but_select(self,obj):
        self.tein_dir.text = str(self.fichoo.path)
        return

    def on_mouse_select(self,obj):
        self.tein_dir.text = str(self.fichoo.path)
        return

    def on_touch_up(self, touch):
        self.tein_dir.text = str(self.fichoo.path)
    return super().on_touch_up(touch)
        return super().on_touch_up(touch)

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    需要做一些改变。

    没有这样的事件on_selectionFileChooserListView 中有属性selection。你can use functionson_<propname>在类里面有这些属性,但是当你使用bind时,你应该只使用bind(<propname>=

    第二件事是默认情况下,正如您在文档selection 中看到的那样,包含选定文件的列表,而不是目录。要使目录实际上可以选择,您应该将dirselect 属性更改为True

    最后是on_mouse_select 签名:属性触发它的值,你应该算上它。

    总结性变化是:

    self.fichoo.dirselect = True
    self.fichoo.bind(selection = self.on_mouse_select)
    
    # ... and
    
    def on_mouse_select(self, obj, val):
    

    之后,您将执行与按钮相同的操作。


    如果你想用你所在的路径而不是选择的路径来填充输入,你可以执行以下操作:

    def on_touch_up(self, touch):
        if self.fichoo.selection:
            self.tein_dir.text = str(self.fichoo.selection[0])
        return super().on_touch_up(touch)
    

    【讨论】:

    • @谢谢!我真的通过两个函数类型“on_”来管理处理变量“路径”和“选择”。
    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多