【问题标题】:Kivy How to set ToggleButton groupsKivy 如何设置 ToggleButton 组
【发布时间】:2018-03-29 10:21:12
【问题描述】:

有人愿意解释为什么 Kivy ToggleButton 中的组名必须是组中按钮的其中一个 id 的名称吗?

我遇到了一个问题并为此苦苦挣扎,最终发现唯一的解决方案是使用其中一个按钮的 id 名称,否则解释器会说未定义组名。我不明白为什么。我查看了 Kivy Docs,但找不到任何关于组本身的信息。它只是说切换按钮可以使用组来创建单选按钮样式的活动。 我正在使用 Kivy 1.10.0 和 Python 3.6.2

我已经重现了下面的问题。我将非常感谢对此的任何见解。

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.togglebutton import ToggleButton

class toggling(BoxLayout):
    pass

class togglingApp(App):
    pass
if __name__ == "__main__":
    togglingApp().run()

kv 文件:

toggling:

    <toggling>:
        orientation: "vertical"
        padding: 5
        spacing: 5
        BoxLayout:
            size_hint_y: None
            height: "40dp"

            Label:
                text: "Title"
        BoxLayout:
            size_hint_y: None
            height: "40dp"

            Label:
                size_hint_x: None
                width: "100dp"
                text: "Firstly"

            ToggleButton:
                text:"A1"
                group: a1
                id: a1
                on_press:
            ToggleButton:
                text:"A2"
                group: a1
                id: faulty
                on_press:

        BoxLayout:
            size_hint_y: None
            height: "40dp"
            Label:
                size_hint_x: None
                width: "100dp"
                text: "Secondly"
            ToggleButton:
                text:"B1"
                id: b1
                group: the_b_group
                on_press:

            ToggleButton:
                text:"B2"
                id: b2
                group: the_b_group
                on_press:

            ToggleButton:
                text:"B3"
                id: b3
                group: the_b_group
                on_press:

        BoxLayout:

背景(如果需要):

我的问题源于一个错误,指出我的 ToggleButton 组名称未定义。我有一些按预期工作的 ToggleButtons,然后我尝试将一组类似的按钮复制并粘贴到新行,并编辑标签。此操作杀死了该应用程序。它不会运行,它说我的组名(对于新的一组按钮)没有定义。

我正在尝试创建一个数据收集应用程序,它是一系列类别,每个系列都有 2-5 个切换按钮。这个想法是在每个组中点击一个按钮,每个组中的数据填充一个列表视图并最终在数据库中归档。

诚然,我的 Python 技能很弱,我才几个月,但我的 kivy 技能较弱。 Kivy 真的很棒,但无论出于何种原因,我发现 Kivy 完全不透明,我通常不明白它在做什么。感谢您的帮助。

【问题讨论】:

    标签: python kivy togglebutton


    【解决方案1】:

    ToggleButton 的 group 的名称不必来自 ToggleButton 的 id 之一。 group 名称是一个字符串。详情请参考以下示例。

    Toggle button

    切换按钮也可以组合成单选按钮 - 组中只有一个按钮可以处于“按下”状态。组名可以是字符串或任何其他可散列的 Python 对象:

    Programming Guide » Kv language » id

    警告

    为 id 赋值时,请记住该值不是字符串。 没有引号:good -> id: value, bad -> id: 'value'

    示例

    main.py

    ​​>
    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    
    
    class toggling(BoxLayout):
        pass
    
    
    class togglingApp(App):
        def build(self):
            return toggling()
    
    
    if __name__ == "__main__":
        togglingApp().run()
    

    toggling.kv

    #:kivy 1.10.0
    
    <toggling>:
        orientation: "vertical"
        padding: 5
        spacing: 5
        BoxLayout:
            size_hint_y: None
            height: "40dp"
    
            Label:
                text: "Title"
        BoxLayout:
            size_hint_y: None
            height: "40dp"
    
            Label:
                size_hint_x: None
                width: "100dp"
                text: "Firstly"
    
            ToggleButton:
                text:"A1"
                group: "a_group"
                id: a1
                on_press:
            ToggleButton:
                text:"A2"
                group: "a_group"
                id: faulty
                on_press:
    
        BoxLayout:
            size_hint_y: None
            height: "40dp"
            Label:
                size_hint_x: None
                width: "100dp"
                text: "Secondly"
            ToggleButton:
                text:"B1"
                id: b1
                group: "the_b_group"
                on_press:
    
            ToggleButton:
                text:"B2"
                id: b2
                group: "the_b_group"
                on_press:
    
            ToggleButton:
                text:"B3"
                id: b3
                group: "the_b_group"
                on_press:
    
        BoxLayout:
    

    输出

    【讨论】:

    • 谢谢你。我有点困惑,因为我尝试了在组名周围加上引号的解决方案(因为我听说它是​​一个字符串),但出于某种原因,这对我不起作用。我使用单引号和双引号有关系吗?这可能是问题所在。
    • 我查过了,显然单引号或双引号都没有关系。
    • 没错。单引号或双引号对于组名无关紧要。这更多的是个人喜好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2016-09-23
    • 2015-03-03
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多