sizer刷新的问题

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

sizer刷新的问题

zinicl
class MyFrame(wx.Frame):
    def __init__(self, title):
        wx.Frame.__init__(self, None, -1, title)

############这一段放在__init__就没有问题
        dlg = wx.FileDialog(None, '选择压力测试脚本文件', os.path.abspath (os.path.dirname(__file__)), '', 'xml脚本(*.xml)|*.xml', wx.OPEN)
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()

            from xml.dom.minidom import parse
            try:
                doc = parse(path).documentElement
                self.parse(doc)
            except:
                pass
            else:
                doc.unlink()

            self.panel = PressureView(self)


整个frame window的宽度是865,PressureView是wx.Panel的派生类,里面使用了wx.BoxSizer,在水平方向上填满整个宽度,但是上面这一段代码如果放在菜单响应函数里面,就出事啦!
只能填到大概600多,必须手工拉一下frame,才能填满整个宽度,但是这段代码放到frame的__init__里面,窗口显示出来的时候就被sizer填满了。
1.为什么会造成这种现象?
2.可否强制发一个ONSIZE消息, 让界面刷新?
3.怎样发这种消息?
谢谢!


_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese
Reply | Threaded
Open this post in threaded view
|

Re: sizer刷新的问题

limodou


2008/1/9 zinicl <[hidden email]>:
class MyFrame(wx.Frame):
    def __init__(self, title):
        wx.Frame.__init__(self, None, -1, title)

############这一段放在__init__就没有问题
        dlg = wx.FileDialog(None, '选择压力测试脚本文件', os.path.abspath (os.path.dirname(__file__)), '', 'xml脚本(*.xml)|*.xml', wx.OPEN)
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()

            from xml.dom.minidom import parse
            try:
                doc = parse(path).documentElement
                self.parse(doc)
            except:
                pass
            else:
                doc.unlink()

            self.panel = PressureView(self)


整个frame window的宽度是865,PressureView是wx.Panel的派生类,里面使用了wx.BoxSizer,在水平方向上填满整个宽度,但是上面这一段代码如果放在菜单响应函数里面,就出事啦!
只能填到大概600多,必须手工拉一下frame,才能填满整个宽度,但是这段代码放到frame的__init__里面,窗口显示出来的时候就被sizer填满了。
1.为什么会造成这种现象?
2.可否强制发一个ONSIZE消息, 让界面刷新?
3.怎样发这种消息?
谢谢!

就个人的经验来说,如果只有一个子控件是在Frame的__init__中创建的,它会自动充满Frame区域,但是如果是后来创建的,必须要使用sizer。所以保险的做法就是使用sizer。如果象你是动态创建控件,那么可以先预先创建好sizer就行了。

--
I like python!
UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
meide <<wxPython UI module>>: http://code.google.com/p/meide/
My Blog: http://www.donews.net/limodou
_______________________________________________
python-chinese
Post: send [hidden email]
Subscribe: send subscribe to [hidden email]
Unsubscribe: send unsubscribe to  [hidden email]
Detail Info: http://python.cn/mailman/listinfo/python-chinese