wxPython 面板在Windows中重绘

2 投票
3 回答
4053 浏览
提问于 2025-04-16 14:34

我正在尝试制作几个不同的页面,每个页面上需要显示不同的文本和按钮。我的做法是创建了一个面板,然后在面板上放了几个布局管理器,接着在下一个页面时,我销毁了这个面板,然后用不同的内容和布局重新创建了一个面板。

在Linux上这个方法运行得很好,但当我在Windows上试同样的代码时,第一页面没问题,但在第二页面及之后的页面上,布局管理器似乎没有生效。

我尝试了各种 .Update() 和 .Refresh() 的方法,但都没有效果。

看起来只有当我最大化窗口时,布局管理器才会生效,页面布局才会正常。(再说一次,在面板被销毁后重新生成新面板时,布局又会乱掉。)

我该如何在Windows上制作两个不同的“页面”(点击一个按钮就能跳转到第二个页面),并且让它们有不同的内容和布局呢?

3 个回答

1

我同意使用Layout()这个方法,但我想建议你可以选择隐藏那些不需要的面板,而不是把它们删除。你可以使用sizer的Show()/Hide()函数,这样可以把面板并排放置,然后只隐藏那些不需要的面板,而不是每次都删除再重新创建它们。

2

看起来还有更好的方法来解决这个问题,不过现在用 panel.Layout() 这个方法解决了。 :)

4

在你添加或删除小部件时,调用小部件的父级的布局是最好的方法。有时候你还需要调用 Refresh() 来让它重新绘制,虽然这通常只有在你使用 Freeze/Thaw 的时候才需要。

撰写回答