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

标签 python python-2.7 kivy kivy-language

我的 .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 小部件“打开”时才启用,但我不知道如何解决这个问题。

谢谢。

最佳答案

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

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

最后,您只需要使用三元运算符语法即可完成您想要的操作:

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

或者:

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

可执行示例:

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

关于python - 如何根据 Kivy 中另一个小部件的值禁用一个小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45204449/

相关文章:

python : How to close a UDP socket while is waiting for data in recv?

python - 在Python中将字典列表划分为子字典

android - Kivy:python-for-android,如何查看 public.mp3 的内容

python - 如何使 LAN 客户端可以发现服务器

python - 提取以大写字母开头的单词

PHP exec(python.py),写入文件的权限被拒绝

python - 创建单行数据框

Python (Matplotlib) - 三元图上的刻度线

Python 2.7 嵌套的 If 语句在打印数组位置后不会打印字符串文字

python - 安装 64 位 pygame 以使用 64 位 kivy