【问题标题】:current size of traitsui editortraitsui 编辑器的当前大小
【发布时间】:2013-06-28 21:01:20
【问题描述】:

我的 traitsui 应用程序中有一个用于 mayavi 场景的 tvtk SceneEditor。在定义这个编辑器时,我要求它的大小为 500x500。

由于 mayavi 工具栏,场景编辑器本身理解它在正常情况下的大小比这个小:

>>> self.scene.scene_editor.get_size()
wx.Size(500, 468)

而且当窗口被放大以至于编辑器占用更多空间时,它也能理解这一点

>>> self.scene.scene_editor.get_size()
wx.Size(500, 781)

但是,如果编辑器变得更小,它会拒绝占用更少的空间(即使内容可以很容易地重新缩放),因为编辑器被指定为占用 500x500。它允许编辑器调整大小,但只是切断部分显示,直到再次放大。

我想知道是否有办法 a) 询问当前在屏幕上显示了多少编辑器(而不是编辑器愿意显示的最小尺寸)和 b) 使编辑器默认为 500x500 但如果它变得更小,愿意要求其内容自行重新缩放。

我正在使用 wxpython 后端。

edit:场景包含在layout='split' Group 中也很重要——在探索了这个问题并遇到了 wx 在添加 traitsui 小部件时生成的大量 sizer 之后,我意识到这也可能很重要。

【问题讨论】:

    标签: traits enthought mayavi traitsui


    【解决方案1】:

    在研究了几天之后,我对 a) 部分有了答案(尽管它很老套,不一定是通用的,它可能特定于 layout='split' 布局)。

    self.scene.scene_editor.control.Parent.Parent.Size 描述了显示编辑器的视口的大小,至少对于layout='split',但我可以很容易地想象它对于其他布局类型(我没有测试)会有所不同。

    有了这些信息,我设法编写了一个包装器,在制作快照之前将编辑器的大小调整到至少这么小。

    更多血腥细节:

    self.scene.scene_editor.control 关联的sizer 不是正确的,可能是因为该sizer 指的是包含编辑器的窗口,而与包含拆分器小部件中的窗口大小关联的sizer 被允许“覆盖”它窗口并忽略其大小。

    我发现添加 traitsui 小部件的过程定义了如此多的框(假设小部件的数量不小),结果是 wx Windows 及其关联的 wx Sizer 的大量过剩,所有这些都依赖于它们的子小部件来确定当前的大小,因此很难控制这样的事情。这可能就是搪瓷存在的原因;以便用户可以明确指定这些约束。也许有一天我会将我的程序转换为使用 enaml,但对于目前运行良好的东西来说,这似乎需要付出很多努力。

    我仍然没有 b) 部分的答案,所以我不回答这个问题。如果有一种方法可以在构建混乱的 wx sizers 时指定允许将此窗口的大小调整到其初始大小以下,那将是很好的,但可能没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      相关资源
      最近更新 更多