wxPython-手动调整面板大小,产生意外/不期望的视觉效果

wxPython-手动调整面板大小,产生意外/不期望的视觉效果,wxpython,Wxpython,我正在为wx.Sizer类开发我自己的替代方案,它允许我基本上将接口视为一个表(或者更准确地说,是一系列嵌套表) 基本上,它有两个部分——我对它们的命名在问题的上下文中更有意义,所以我们将它们称为节和单元 节基本上是一列或一行,这取决于它的方向,单元格是所述列或行中的项目。它对单元格之间的边距、对齐和间距有自己的定义,并有调整单元格大小的规则。节可以是一个框架、一个面板,也可以只是一个逻辑结构。单元本身可以是剖面,具有自己的方向、对齐方式、边距和间距,也可以只是一个面板、按钮等。单元可以替代剖面

我正在为wx.Sizer类开发我自己的替代方案,它允许我基本上将接口视为一个表(或者更准确地说,是一系列嵌套表)

基本上,它有两个部分——我对它们的命名在问题的上下文中更有意义,所以我们将它们称为节和单元

节基本上是一列或一行,这取决于它的方向,单元格是所述列或行中的项目。它对单元格之间的边距、对齐和间距有自己的定义,并有调整单元格大小的规则。节可以是一个框架、一个面板,也可以只是一个逻辑结构。单元本身可以是剖面,具有自己的方向、对齐方式、边距和间距,也可以只是一个面板、按钮等。单元可以替代剖面的大小或对齐方式

功能上是这样的:

  • 帧大小调整后,wx.EVT_SIZE触发adjust()函数
  • 在帧级别,“adjust”拉取GetClientSize()并使用这些数字进行计算
  • adjust()使用大小来确定其单元格的大小和位置,然后对这些单元格调用adjust(),提供要调整的单元格的大小和位置
  • 如果单元格是面板,则adjust()将相应地调整面板的大小和位置
  • 如果单元格也是一个节,adjust()将使用提供的数字重复步骤3,并在其自己的单元格上调用adjust()
  • 它是有效的。嗯,主要是。例如:

    以上内容包括:

    • 水平对齐的部分/框架(黑色背景)
    • 垂直对齐的部分/面板(灰色),带有三个面板/单元(蓝色、白色和红色)
    • 垂直对齐的部分/面板(灰色),带有四个面板/单元(蓝色、白色、白色和红色)
    一切都是我想要的。如果我调整它的大小,所有东西都会精确地停留在我想要的方式和位置

    除了。 有时我会得到一件奇怪的事情

    蓝色条中的那个白色小条不应该在那里。(A列顶部的灰线是不需要的,但我知道它为什么在那里。)

    它似乎不会持续发生,而且只会在增加尺寸时发生,通常是快速增加。这包括(有时)最大化窗口。不幸的是,一旦发生这种情况,当调整其大小时,错误仍然存在,直到其大小足够小,使出现故障的零件消失为止

    这就是我截图的例子——有时是酒吧,有时是台词。(线条通常为白色(假设从面板上看),但局部为黑色(帧背景)。

    解决了它

    adjust()函数现在在正在调整的面板上调用Refresh()(这是第一次标记Refresh(),这对我尝试过的任何东西都有帮助。)