如何根据Kivy中另一个小部件的值禁用一个小部件

2024-10-01 07:19:24 发布

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

我在一个.kv文件中有一个Spinner小部件,我需要这个Spinner的值来启用另一个Spinner小部件。在

这是我尝试过的代码,但它不起作用,并给我一个语法错误:

CustLabel:
    text: "Aux LO Pump Status"


CustSpinner:
    id: auxlo
    text: "Select"
    values: ('On', 'Off')
    focus: True
    on_state: (self.auxlonum.disabled) if (self.auxlo == 'off')

CustLabel:
    text: "Aux LO Pump Number"

CustSpinner:
    id: auxlonum
    text: "Select"
    values: ('# 1', '# 2')
    focus: True

实际上,我更希望auxlonum小部件启动时禁用并“灰显”,然后只有在auxlo小部件选择了“开”的情况下才启用,但是我不确定如何实现这一点。在

谢谢。在


Tags: textidtruelo部件selectfocusvalues
1条回答
网友
1楼 · 发布于 2024-10-01 07:19:24

首先,您不能使用on_state事件,因为它在您选择一个值之前发出。您需要使用on_text事件。在

另一方面,self.auxlonum是一个不正确的语法,您应该使用id来引用kv中的任何小部件。在

最后,您只需使用三元运算符语法即可执行以下操作:

Spinner:
    id: auxlo
    on_text: auxlonum.disabled = True if auxlo.text == 'Off' else False

或者:

^{pr2}$

可执行示例:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

from kivy.lang import Builder


Builder.load_string('''
<MyWidget>
    orientation: 'vertical'
    Spinner:
        id: auxlo
        text: "Select"
        values: ('On', 'Off')
        focus: True
        on_text: auxlonum.disabled = True if auxlo.text == 'Off' else False

    Label:

    Spinner:
        id: auxlonum
        text: "Select"
        values: ('# 1', '# 2')
        focus: True

    Label:
''')


class MyWidget(BoxLayout):
    pass

class TestApp(App):
    def build(self):            
        return  MyWidget()

TestApp().run()

enter image description here

相关问题 更多 >