【问题标题】:Why is wxGridSizer much slower to initialize on a wxDialog then on a wxFrame?为什么 wxGridSizer 在 wxDialog 上的初始化比在 wxFrame 上要慢得多?
【发布时间】:2009-07-29 04:36:47
【问题描述】:

好像这个是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()

我已经在以下配置上尝试过:

  • Windows 7 与 Python 2.5.4 和 wxPython 2.8.10.1
  • Windows XP 与 Python 2.5.2 和 wxPython 2.8.7.1
  • Windows XP 与 Python 2.6.0 和 wxPython 2.8.9.1
  • Ubuntu 9.04 与 Python 2.6.2 和 wxPython 2.8.9.1

wxDialog 不仅在 Ubuntu 上很慢。

【问题讨论】:

    标签: python windows wxpython


    【解决方案1】:

    我收到了wxPython-users mailing list 的回复,可以通过在显示对话框之前显式调用Layout 来解决问题。

    这真的很奇怪......

    我猜这是由于 Windows 和 wxWidgets 处理得不太好 好与重叠的兄弟姐妹,所以 当 sizer 进行初始设置时 布局和移动所有面板 (0,0) 到他们需要的地方 关于对话框的某些事情导致 所有这些都被刷新和 每一步都重新粉刷。如果你 而是在之前进行初始布局 显示对话框然后它就像 快如框架。

    您可以通过在末尾添加对 window.Layout() 的调用来做到这一点 制作网格。

    -- 罗宾·邓恩

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2014-07-18
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多