2015-02-11 20 views
0

当我运行下面的程序时,我所得到的只是一个小窗口,并且根据程序有一个小文本框(文本框),它应该是一个大窗口,更大的文本框和两个按钮。wxPython - 框架没有打开,因为它的编程

import wx 

class FirstFrame(wx.Frame): 
    def __init__(self,parent,id,title): 
     wx.Frame.__init__(self,parent,id,'PIZZA', size=(400,400)) 
     self.sizer = wx.FlexGridSizer(2,2,5,5) 
     panel=wx.Panel(self,-1) 
     self.button1 = wx.Button(panel,id=-1,label='Click Me!', size=(20,20)) 
     self.textbox = wx.TextCtrl(panel,id=-1,size=(50,50)) 
     self.button2 = wx.Button(panel,-1,'Click Me Too!',size=(20,20)) 
     #trying to use the boxer... 
     self.sizer.Add(self.textbox) 
     self.sizer.Add(self.button1) 
     self.sizer.Add(self.button2) 
     self.SetSizerAndFit(self.sizer) 

class MyGame(wx.App): 
    def OnInit(self): 
     frame=FirstFrame(None,-1,"wx") 
     frame.Show(True) 
     self.SetTopWindow(frame) 
     return True 

app=MyGame() 
app.MainLoop() 

回答

0

我终于找到了答案: 显然,它有时会发生,当类有画框架上的背景或设定的位置,而无需使用分级机的命令。大约10个星期后,当整个项目完成时,它将自己整理出来。

0

你可能想要的是你__init__改变的最后一行以下:

panel.SetSizerAndFit(self.sizer) 

这是在上下文中的代码:

import wx 

class FirstFrame(wx.Frame): 
    def __init__(self,parent,id,title): 
     wx.Frame.__init__(self,parent,id,'PIZZA', size=(400,400)) 
     self.sizer = wx.FlexGridSizer(2,2,5,5) 
     panel=wx.Panel(self,-1) 
     self.button1 = wx.Button(panel,id=-1,label='Click Me!', size=(20,20)) 
     self.textbox = wx.TextCtrl(panel,id=-1,size=(50,50)) 
     self.button2 = wx.Button(panel,-1,'Click Me Too!',size=(20,20)) 
     #trying to use the boxer... 
     self.sizer.Add(self.textbox) 
     self.sizer.Add(self.button1) 
     self.sizer.Add(self.button2) 
     panel.SetSizerAndFit(self.sizer) 

class MyGame(wx.App): 
    def OnInit(self): 
     frame=FirstFrame(None,-1,"wx") 
     frame.Show(True) 
     self.SetTopWindow(frame) 
     return True 

app=MyGame() 
app.MainLoop() 

就个人而言,我不由于这样的奇怪问题,请使用Fit()SetSizerAndFit()

0

如果你使用sizer,你不应该使用固定大小,让sizers做他们的工作:)。

因此,从按钮和文本控件中删除'size =',并将init中的最后一行更改为'panel.SetSizer(self.sizer),您的sizer控制面板中子项的东西,把它设置到框架上。由于面板是框架中唯一可以工作的部分,否则您需要使用另一个sizer作为框架。

我是sized_controls的粉丝,所以在这里你将如何使用它们,它们会自动处理所有sizer的东西,但是如果你需要的话,它们仍然可以让你控制,查看wxPython演示和/或DOC在:sized_controls doc

import wx 
import wx.lib.sized_controls as sc 

class FirstFrame(sc.SizedFrame): 
    def __init__(self,parent,id,title): 
     super(FirstFrame, self).__init__(parent, id, 'PIZZA') 
     pane = self.GetContentsPane() 
     self.button1 = wx.Button(pane,id=-1,label='Click Me!') 
     self.textbox = wx.TextCtrl(pane,id=-1) 
     self.button2 = wx.Button(pane,-1,'Click Me Too!') 

class MyGame(wx.App): 
    def OnInit(self): 
     frame=FirstFrame(None,-1,"wx") 
     frame.Show(True) 
     self.SetTopWindow(frame) 
     return True 

app=MyGame() 
app.MainLoop() 
相关问题