You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何动态添加Traits后调用modal模式configure_traits()会崩溃?

动态添加Traits后调用configure_traits(kind="modal")崩溃问题

关联GitHub Issue:traitsui#2064

测试代码

#! /usr/bin/env python

# Minimal test case for demonstrating problem w/ dynamically
# added Traits in modal call of `configure_traits()`.
#
# David Banas <capn.freako@gmail.com>
# March 4, 2025

from traits.api import HasTraits, Int

class Foo(HasTraits):
    Bar = Int(5)

    def __init__(self):
        super().__init__()
        self.add_trait("Blatz", Int(10))

if __name__ == "__main__":
    foo = Foo()
    # foo.configure_traits()            # 此调用正常运行
    foo.configure_traits(kind="modal")  # 此调用会崩溃

报错信息

被注释的configure_traits()调用运行正常,但未注释的modal模式调用会崩溃,报错如下:

$ ./configure_traits_crash.py
Traceback (most recent call last):
  File "C:\Users\dbanas\tmp\configure_traits_crash.py", line 21, in <module>
    foo.configure_traits(kind="modal")
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traits\has_traits.py", line 2099, in configure_traits
    rc = toolkit().view_application(
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\toolkit.py", line 237, in view_application
    return view_application.view_application(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\view_application.py", line 92, in view_application
    return ViewApplication(
           ^^^^^^^^^^^^^^^^
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\view_application.py", line 127, in __init__
    self.ui = self.view.ui(
              ^^^^^^^^^^^^^
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\view.py", line 457, in ui
    ui.ui(parent, kind)
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\ui.py", line 234, in ui
    self.rebuild(self, parent)
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\toolkit.py", line 176, in ui_modal
    ui_modal.ui_modal(ui, parent)
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\ui_modal.py", line 49, in ui_modal
    _ui_dialog(ui, parent, BaseDialog.MODAL)
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\ui_modal.py", line 67, in _ui_dialog
    BaseDialog.display_ui(ui, parent, style)
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\ui_base.py", line 294, in display_ui
    ui.owner.init(ui, parent, style)
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\ui_modal.py", line 183, in init
    self.add_contents(panel(ui), bbox)
                      ^^^^^^^^^
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\ui_panel.py", line 270, in panel
    panel = _GroupPanel(content[0], ui).control
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\ui_panel.py", line 621, in __init__
    layout = self._add_items(content, inner)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\qt\ui_panel.py", line 855, in _add_items
    editor = factory_method(
             ^^^^^^^^^^^^^^^
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\editor_factory.py", line 117, in simple_editor
    return self.simple_editor_class(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\dbanas\.venv\pybert-dev\Lib\site-packages\traitsui\editor.py", line 540, in __init__
    self.old_value = getattr(self.object, self.name)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'Foo' object has no attribute 'Blatz'

环境信息

  • 操作系统:Windows 10
$ python --version
Python 3.12.4

$ pip show Traits
Name: traits
Version: 7.0.2
{snip}

$ pip show TraitsUI
Name: traitsui
Version: 8.0.0
{snip}

问题

默认调用configure_traits()可以处理动态添加的Traits,但modal模式调用却无法处理,这是为什么?

内容的提问来源于stack exchange,提问作者David Banas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:22:07