properties - 如何使 edit_traits() GUI 项目响应其依赖项的变化?
问题描述
我正在设计一个HasTraits
具有依赖属性的子类:
#!/usr/bin/env python
# Example for SO question on dynamically changing Dict contents.
from traits.api import HasTraits, Dict, Property, Trait, Int, cached_property
from traitsui.api import View, Item
class Foo(HasTraits):
"Has dependent properties, which I'd like to remain up-to-date in the GUI."
_dicts = [
{"zero": 0, "one": 1},
{"zero": 1, "one": 2},
{"zero": 2, "one": 3},
]
zap = Int(0)
bar = Property(Trait, depends_on=["zap"])
baz = Trait(list(_dicts[0])[0], _dicts[0])
@cached_property
def _get_bar(self):
return Trait(list(self._dicts)[self.zap], self._dicts)
traits_view = View(
Item("zap"),
Item("bar"),
Item("baz"),
width=500,
)
if __name__ == '__main__':
Foo().configure_traits()
当我运行此代码时,我看到:
如果我改变 的值Zap
:
请注意以下事项:
改了之后
Zap
,地址Bar
就变了。这意味着更改
Bar
在 GUI 中动态更新,而它仍处于打开状态;那太棒了!然而...在 GUI 中显示的方式
Bar
不是很有用。我很想
Bar
按原样Baz
显示:用户可选择。
我想要的是两全其美:
- 我看到的动态 GUI 更新
Bar
, 和 - 的显示格式
Baz
。
有谁知道我怎么能得到这个?
我尝试了几种Baz
动态更新类似项目的方法,但无济于事。(请参阅this previous SO question。)
解决方案
我假设您希望两者都bar
成为baz
类型dict
(在 traits 中Dict
)。实际上,预定义的 trait 类型有默认的显示小部件,这比显示地址更有用。我相信traitsui
不知道如何正确显示您的自定义 Trait 对象,除非您明确为其分配编辑器。请注意,对于 baz,虽然生成了一个下拉菜单,但它只是显示键,这也不是很有用。
话虽如此,以下代码可能会满足您的期望。
class Foo(HasTraits):
"Has dependent properties, which I'd like to remain up-to-date in the GUI."
_dicts = [
{"zero": 0, "one": 1},
{"zero": 1, "one": 2},
{"zero": 2, "one": 3},
]
zap = Int(0)
bar = Property(Dict, depends_on=["zap"])
baz = Trait(list(_dicts[0])[0], _dicts[0])
@cached_property
def _get_bar(self):
return self._dicts[self.zap]
traits_view = View(
Item("zap"),
Item("bar", style="custom"),
Item("baz"),
width=500,
)
推荐阅读
- entity-framework - EF Core 2+ - 使用通用存储库预加载
- r-plotly - 如何将 geom_point(aes()) + geom_vline(aes()) 转换为 Plotly?
- ios - 如何使用 Swift 5 从 URL 获取 HTML 代码
- ios - Firebase - 如何在创建新用户之前检查电话身份验证中是否存在电话号码
- python - 为什么在 python 中导入模块时出现“ModuleNotFoundError: No module named 'YEETER'”?
- c++ - 计算二维图像的垂直梯度会导致奇怪的输出
- excel - 为什么我在以下代码中不断收到“Else without If”错误?
- nexus - 我应该将哪种存储库格式与 Sonatype Nexus 一起用于非通用构建输出?
- c - CSFML顶点数组和绘图
- python - 返回字符串“hi”出现在给定字符串中任意位置的次数——Python codingbat问题