wxPython

wxPython求助
大侠们,小弟写一段代码。开始的时候用了格式一,一直不能成功的改变窗体大小。改了格式二后就可以了。望指点一二。

在格式一中,直接将self(一个window)当做notebook的parent,然后绑定BoxSizer到self上。这样做的时候通过跟踪调试发现:当self的大小能变化的时候,notebook的大小是完全不变的(8,8)大小。
但是在格式二中,仅仅是在self与notebook之间加了一层panel,而且panel的大小改变随着self变化,BoxSizer绑定到panel上;为什么在这样的情况下当self大小发生变化的时候,notebook能够跟着一起变化呢?我非常之不理解。

格式一::

import os
import wx
import cPickle

class BoardWindow(wx.Window):

  def __init__(self,parent,ID):
  wx.Window.__init__(self,parent,ID)
  self.tables={}
  self.notebookId=wx.NewId()
  self.notebook=wx.Notebook(self,self.notebookId,style=wx.Right)
   
  psi = wx.Panel(self.notebook,-1)
  psi.SetBackgroundColour("Blue")
  self.notebook.AddPage(psi, "Green")
   
  program = wx.Panel(self.notebook,-1)
  program.SetBackgroundColour("Black")
  self.notebook.AddPage(program, "Mine")

  packets = wx.Panel(self.notebook,-1)
  packets.SetBackgroundColour("Green")
  self.notebook.AddPage(packets, "Packet")
   
  self.box = wx.BoxSizer(wx.VERTICAL)
  self.box.Add(self.notebook,1,wx.EXPAND)
  self.SetSizer(self.box)
  self.box.Fit(self)

格式二::

import os
import wx
import cPickle

class BoardWindow(wx.Window):

  def __init__(self,parent,ID):
  wx.Window.__init__(self,parent,ID)
  self.tables={}
   
  self.panel=wx.Panel(self,-1,style=wx.BORDER_SIMPLE)
   
  self.notebookId=wx.NewId()
  self.notebook=wx.Notebook(self.panel,self.notebookId,style=wx.Right)
   
  psi = wx.Panel(self.notebook,-1)
  psi.SetBackgroundColour("Blue")
  self.notebook.AddPage(psi, "Green")
   
  program = wx.Panel(self.notebook,-1)
  program.SetBackgroundColour("Black")
  self.notebook.AddPage(program, "Mine")

  packets = wx.Panel(self.notebook,-1)
  packets.SetBackgroundColour("Green")
  self.notebook.AddPage(packets, "Packet")
   
  self.box = wx.BoxSizer(wx.VERTICAL)
  self.box.Add(self.notebook,1,wx.EXPAND)
  self.panel.SetSizer(self.box)
  self.box.Fit(self.panel)

  self.Bind(wx.EVT_SIZE, self.OnSize)

  def OnSize(self,event):
  self.panel.SetSize((self.GetSize().width,self.GetSize().height))
  print "self:",self.GetSize()
  print "notebook",self.notebook.GetSize()


------解决方案--------------------
当然不一样了,Sizer只会管理被Add进它的控件及其children,而不会管理被Add进它的控件的parent
------解决方案--------------------
如果界面 不复杂 ,感觉 直接 用 pos=(110,110), size=(120,120)来控制大小位置更快些。可以和sizer共同使用
------解决方案--------------------
楼主使用wx.Window有特殊的目的吗,如果没有,直接用wx.Frame不就可以了。
------解决方案--------------------
建立窗口都有个默认的style参数,可以显式制定去掉wxCAPTION就没那标题栏,style细项嘛自己查看文档...
------解决方案--------------------
觉得只是因为wx.Window.__init__(self,parent,ID)弄出一个垃圾当parent,所以sizer失效,第二种nb的parent是正常的panel所以没事。像你这样的写法,肯定先前已存在一个父窗口,所以这个类可以不用继承啥的,只要有parent传入即可,实质等于一个layout函数。