首页 > 解决方案 > wxPython 方法 Freeze 将小部件变为黑色

问题描述

Centos 7.4、Python 3.6.8、wxPython 4.1.0

import wx
app = wx.App()
myFrame = wx.Frame(None, title="")
myPanel = wx.Panel(myFrame)
myStaticText = wx.StaticText(myPanel, label="Hello World")
mySizer = wx.BoxSizer(wx.VERTICAL)
mySizer.Add(myStaticText, wx.SizerFlags().Center())
myPanel.SetSizer(mySizer)
myFrame.Show()
#myFrame.Freeze()
app.MainLoop()

运行上述代码时,会出现一个小部件,其中包含可见的文本“Hello World”。但是,如果在未注释注释行的情况下运行代码,则会显示一个完全黑色的小部件。为什么这个 Freeze 调用会改变小部件的显示?冻结应该防止对小部件显示进行任何更新。

依赖项:gtk3-devel、libXtst-devel、libtiff-devel、gcc gcc-c++ epel-release、libGLU-devel

标签: wxpythonwxwidgetsgtk3freeze-thaw

解决方案


Freeze()应该在您反复修改小部件时暂时禁止更新显示,以避免不必要的中间刷新和由此产生的闪烁,但必须解冻小部件以使其最终正确重绘。正如您所观察到的,将其冻结将阻止其更新。

通常,您很少(如果有的话)需要使用此方法。这是一种优化,绝对不是您必须使用的东西。


推荐阅读