如何让Python guidata DataItem被多个属性函数激活?
实现guidata DataItem基于多个ChoiceItem的激活状态控制
可以通过gdt.MultiProp将多个ChoiceItem的属性关联起来,自定义复合逻辑来控制目标DataItem的激活状态。针对你的需求,我们需要让'Choice D'在**'Choice A'为'A1' 或 'Choice B'为True**时激活,具体实现如下:
修改后的完整代码
import sys import guidata.dataset.datatypes as gdt import guidata.dataset.dataitems as gdi from PyQt5.QtWidgets import QApplication # 初始化QApplication _in_app = QApplication(sys.argv) class Input(gdt.DataSet): _prop1 = gdt.GetAttrProp('select_chA') choicesA = (('a1', "A1"), ('a2', "A2")) select_chA = gdi.ChoiceItem("Choice A:", choicesA, default='a2').set_prop('display', store=_prop1) _prop2 = gdt.GetAttrProp('select_chB') select_chB = gdi.BoolItem("Choice B:", default=False).set_prop('display', store=_prop2) choicesC = (('c1', "C1"),('c2', "C2")) select_chC = gdi.ChoiceItem("Choice C:", choicesC).set_prop('display', active=gdt.FuncProp(_prop2, lambda x: x)) choicesD = (('d1', "D1"), ('d2', "D2"), ('d3', "D3")) # 使用MultiProp组合多个属性,自定义激活逻辑 select_chD = gdi.ChoiceItem("Choice D:", choicesD).set_prop( 'display', active=gdt.FuncProp( gdt.MultiProp(_prop1, _prop2), lambda x, y: x == 'a1' or y ) ) inputs = Input() input_dialog = inputs.edit()
关键说明
gdt.MultiProp:用于将多个需要监听的属性(这里是_prop1对应Choice A,_prop2对应Choice B)组合成一个复合属性,让FuncProp可以同时获取多个属性的当前值。- 复合激活逻辑:lambda函数接收两个参数
x(Choice A的当前值)和y(Choice B的当前值),返回x == 'a1' or y,表示只要满足其中一个条件,就激活Choice D。 - 原代码中
lambda x: x != False可简化为lambda x: x,逻辑效果完全一致。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

