wxPython方法冻结使小部件变黑

wxPython方法冻结使小部件变黑,wxpython,wxwidgets,gtk3,freeze-thaw,Wxpython,Wxwidgets,Gtk3,Freeze Thaw,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

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”。但是,如果代码在未注释注释行的情况下运行,将显示一个完全黑色的小部件。为什么这个冻结调用会改变小部件的显示?冻结是为了防止小部件显示的任何更新

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

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


通常情况下,您很少需要使用这种方法。这是一个优化,绝对不是你必须使用的东西。

我没有看到调用
myFrame.Thaw()
。这是我可以编写的最简单的代码,用于显示我的问题,即调用冻结而不是解冻。在我的完整代码中,我调用了解冻,这将使黑色小部件恢复正常。但我的问题是,调用Freeze一开始就不应该让我的小部件变黑。为什么一开始就需要调用它?正如瓦迪姆所指出的,这是很少需要的。我在我的完整代码中使用它是为了防止屏幕在冻结时更新。直到我想更新屏幕,在其中我调用了解冻。为什么在
Show()
之后调用
Freeze()
?您可以尝试另一种方式…我同意,在调用解冻之前,冻结不应更改显示,但我的观点是,对冻结的调用将使我的小部件变黑,而不仅仅是在它所在的位置暂停显示。我希望当小部件冻结时,小部件仍然显示“Hello World”。关键是你不能让小部件冻结,也就是说,你的期望不是它的工作方式。冻结意味着禁止完全重新喷漆。@VZ。不过,Windows中的行为是您所期望的-框架会按原样冻结。它不会变黑。与CentOS 7.4中的Python2.7+Wxpython3.0.0+gtk2相同。冻结时变黑的行为只发生在CentOS+Python 3.6.8+gtk3+wxpython Phoenix中。这是一种新的行为,不是预期的,也不是记录在案的。我自己测试过了。对不起,我不知道如何更好地解释它。不支持也不应该冻结窗口而不解冻。这并不意味着它在任何地方都会以同样的方式失败(甚至完全失败),它只是意味着,对于任何“工作”的定义来说,它绝对不能保证工作。