引用Kivy中动态创建的widget的id

2024-05-18 08:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法通过root.ids.created_in_kv。在绑定到按钮的方法中创建了。当我检查root.ids.created_in_kv.ids字典为空,但在中有子级root.ids.created_in_kv儿童

我要实现的是创建一个弹出窗口,作为多个选择器。它将接受可能的选择,并动态创建标签复选框对并将其添加到弹出内容中,在“应用”按钮上它将只返回所选列表(str())。在

我不能在kv中构建包含多个窗口小部件的弹出窗口,但以下是可行的(建议使其“更好”而不是受欢迎):

kv代码:

<SelectorPopup>:
    title: 'empty'
    BoxLayout:
        id: inside
        orientation: 'vertical'
        BoxLayout:
            id: options
        BoxLayout:
            id: buttons
            orientation: 'vertical'
            Button:
                text: 'Apply'
                on_release: root.return_selected()
            Button:
                text: 'Cancel'
                on_release: root.dismiss()

<LabeledCheckbox@BoxLayout>:
    id: entity
    CheckBox:
        id: choice
    Label:
        text: root.id

我正在创建标签复选框对(打包在GridLayout中)并将其放入选项框布局中的python代码:

^{pr2}$

问题:

1)如何使返回选定的方法有效?在

2)有没有一种方法可以更好地构建弹出窗口?我无法将widget树添加到contentObjectProperty中,如下所示:

<MyPopup>:
    content:
        BoxLayout:
            Label:
                text: 'aaa'
            Label:
                text: 'bbb'

Tags: 方法代码textinididsroot标签
1条回答
网友
1楼 · 发布于 2024-05-18 08:34:46

看来你对身份证的工作方式有点困惑。它们在文档中有一点讨论:https://kivy.org/docs/api-kivy.lang.html

基本上,它们只是.kv中的特殊标记,允许您引用已定义的小部件。它们被收集并放在其中定义的规则的根小部件上的ids字典。这意味着它们并不像您引用它们那样嵌套,它们都在根小部件上(SelectorPopup或{})

因此,不是(从SelectorPopup内):

self.ids.inside.options.choices

你会有:

^{pr2}$

这也意味着动态添加的小部件不会出现在ids字典中,但实际上并不需要。因为您是在代码中创建它们的,所以您只需自己保存对它们的引用(使用.kv更难做到这一点)。在

尽管如此,使用ListView来显示项目列表可能要容易得多。在

相关问题 更多 >