这似乎是特定于windows,这是一个再现效果的例子:
import wx
def makegrid(window):
grid = wx.GridSizer(24, 10, 1, 1)
window.SetSizer(grid)
for i in xrange(240):
cell = wx.Panel(window)
cell.SetBackgroundColour(wx.Color(i, i, i))
grid.Add(cell, flag=wx.EXPAND)
class TestFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
makegrid(self)
class TestDialog(wx.Dialog):
def __init__(self, parent):
wx.Dialog.__init__(self, parent)
makegrid(self)
class Test(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
btn1 = wx.Button(self, label="Show Frame")
btn2 = wx.Button(self, label="Show Dialog")
sizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(sizer)
sizer.Add(btn1, flag=wx.EXPAND)
sizer.Add(btn2, flag=wx.EXPAND)
btn1.Bind(wx.EVT_BUTTON, self.OnShowFrame)
btn2.Bind(wx.EVT_BUTTON, self.OnShowDialog)
def OnShowFrame(self, event):
TestFrame(self).Show()
def OnShowDialog(self, event):
TestDialog(self).ShowModal()
app = wx.PySimpleApp()
app.TopWindow = Test()
app.TopWindow.Show()
app.MainLoop()
我在以下配置中试过这个:
wxDialog在Ubuntu上并不慢。
答案 0 :(得分:2)
我收到wxPython-users mailing list的回复,可以通过在显示对话框之前显式调用Layout
来解决问题。
这真的很奇怪......
我的猜测是,这是由于 Windows和wxWidgets处理不当 与兄弟姐妹重叠,等等 当sizer正在进行初始化时 布局和移动所有面板 (0,0)他们需要的地方 关于对话框的一些事情正在引起 所有这些都要精神焕发 每次搬家都重新粉刷。如果你 而是先做初始布局 显示对话框然后它就像 快于框架。
您可以通过添加对window.Layout()的调用来完成此操作 makegrid。
- 罗宾邓恩