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

问题描述

我正在为wx.Sizer类开发自己的替代品,它使我基本上可以将接口视为表(或更准确地说,是一系列嵌套表)。

基本上,它有两个部分-在出现问题的情况下,我的名字更有意义,因此我们将其称为部分和单元格。

节基本上是一列或一行,具体取决于它的定向方式,而单元格是所述列或行中的项目。对于单元格之间的边距,对齐方式和间距,它有自己的定义,并且对单元格的大小有规定。一个部分可以是框架,面板或仅是逻辑结构。单元格本身可以是具有自己的方向,对齐方式,边距和间距的部分,也可以只是面板,按钮等。单元格可以覆盖该部分的大小或对齐方式。

功能上是这样的:

  1. 调整帧大小,wx.EVT_SIZE触发adjust()函数
  2. 在帧级别,“调整”拉取GetClientSize()并使用这些数字进行数学运算。
  3. adjust()使用大小来确定其单元格的大小和位置,然后在这些单元格上调用Adjust(),以提供这些单元格的大小和位置。
  4. 如果该单元格是面板,则Adjust()将相应地调整面板的大小并重新定位。
  5. 如果该单元格也是一个节,则Adjust()将使用提供的数字重复步骤3,并在其自己的单元格上调用Adjust()。

它有效。好吧,主要是。例如:

a screenshot

以上内容包括

  • 水平对齐的部分/框架(黑色背景)
  • 具有三个面板/单元格(蓝色,白色和红色)的垂直对齐的部分/面板(灰色)
  • 具有四个面板/单元格(蓝色,白色,白色和红色)的垂直对齐的部分/面板(灰色)

一切都恰好在我想要的地方和方式上。而且,如果我调整其大小,一切都会精确地保留在我想要的方式和位置。

除外。 有时我会感到奇怪。

another screenshot,this one not so perfect

蓝色条中的白色小条不应存在。 (A列顶部的灰线是不必要的,但我知道为什么会出现。)

它似乎并没有始终如一地发生,仅在增大大小时才会发生,通常是迅速增加。这包括(有时)最大化窗口。不幸的是,一旦发生这种情况,调整大小后该错误仍然存​​在,直到其大小足够小以至于带有毛刺的零件消失了。

那只是我获得该屏幕截图的示例-有时是一个栏,有时是一行。 (线条通常是白色的(从面板上假设),但有时是黑色的(框架背景)。

解决方法

解决了。

Adjust()函数现在在正在调整的面板上调用Refresh()。 (这标志着Refresh()首次对我进行了尝试,对我有帮助。)