2011-04-13 34 views
0

我有一个gui有3个基本区域。一个列表控件,它跨越窗口的整个宽度,位于根据按钮功能分组的两个按钮区域上方。wxpython:防止特定字段的水平增长

当调整窗口大小时,所有3个区域的大小将与窗口的增长成比例。我想要发生的是两个按钮区域不能做任何高度增长,但会允许宽度增长。

这可能吗?

以下是我用作示例。我使用wxGlade生成了这个

#!/usr/bin/env python 
# -*- coding: iso-8859-15 -*- 
# generated by wxGlade 0.6.3 on Thu Apr 14 07:05:59 2011 

import wx 

# begin wxGlade: extracode 
# end wxGlade 



class mainFrame(wx.Frame): 
    def __init__(self, *args, **kwds): 
     # begin wxGlade: mainFrame.__init__ 
     kwds["style"] = wx.DEFAULT_FRAME_STYLE 
     wx.Frame.__init__(self, *args, **kwds) 
     self.panelLower = wx.Panel(self, -1) 
     self.panelUpper = wx.Panel(self, -1) 
     self.sizerPassword_staticbox = wx.StaticBox(self.panelLower, -1, "Password Settings") 
     self.sizerInstall_staticbox = wx.StaticBox(self.panelLower, -1, "Install Actions") 
     self.sizerStatus_staticbox = wx.StaticBox(self.panelUpper, -1, "Status") 
     self.listStatus = wx.ListCtrl(self.panelUpper, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) 
     self.list_ctrl_1 = wx.ListCtrl(self.panelLower, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) 

     self.__set_properties() 
     self.__do_layout() 
     # end wxGlade 

    def __set_properties(self): 
     # begin wxGlade: mainFrame.__set_properties 
     self.SetTitle("frame_1") 
     # end wxGlade 

    def __do_layout(self): 
     # begin wxGlade: mainFrame.__do_layout 
     mainSizer = wx.GridSizer(2, 1, 0, 0) 
     sizerLower = wx.GridSizer(1, 2, 0, 0) 
     sizerInstall = wx.StaticBoxSizer(self.sizerInstall_staticbox, wx.HORIZONTAL) 
     sizerInstallButtons = wx.GridSizer(1, 2, 0, 0) 
     sizer_4 = wx.BoxSizer(wx.VERTICAL) 
     sizerPassword = wx.StaticBoxSizer(self.sizerPassword_staticbox, wx.HORIZONTAL) 
     sizerPasswordButtons = wx.GridSizer(3, 8, 0, 0) 
     sizerStatus = wx.StaticBoxSizer(self.sizerStatus_staticbox, wx.VERTICAL) 
     sizerStatus.Add(self.listStatus, 1, wx.EXPAND, 0) 
     self.panelUpper.SetSizer(sizerStatus) 
     mainSizer.Add(self.panelUpper, 1, wx.EXPAND, 0) 
     sizerPassword.Add(sizerPasswordButtons, 1, wx.EXPAND, 0) 
     sizerLower.Add(sizerPassword, 1, wx.EXPAND, 0) 
     sizerInstallButtons.Add(self.list_ctrl_1, 1, wx.EXPAND, 0) 
     sizerInstallButtons.Add(sizer_4, 1, wx.EXPAND, 0) 
     sizerInstall.Add(sizerInstallButtons, 1, wx.EXPAND, 0) 
     sizerLower.Add(sizerInstall, 1, wx.EXPAND, 0) 
     self.panelLower.SetSizer(sizerLower) 
     mainSizer.Add(self.panelLower, 1, wx.EXPAND, 0) 
     self.SetSizer(mainSizer) 
     mainSizer.Fit(self) 
     self.Layout() 
     # end wxGlade 

# end of class mainFrame 


if __name__ == "__main__": 
    app = wx.PySimpleApp(0) 
    wx.InitAllImageHandlers() 
    mainFrame = mainFrame(None, -1, "") 
    app.SetTopWindow(mainFrame) 
    mainFrame.Show() 
    app.MainLoop() 

回答

0
import wx 

class MainWindow(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 
     self.panel1 = wx.Panel(self) 
     self.panel1.SetBackgroundColour(wx.GREEN) 
     self.panel2 = wx.Panel(self) 
     self.panel2.SetBackgroundColour(wx.RED) 
     self.panel3 = wx.Panel(self) 
     self.panel3.SetBackgroundColour(wx.WHITE) 

     self.sizer1 = wx.BoxSizer() 
     self.sizer2 = wx.BoxSizer(wx.VERTICAL) 
     self.sizer1.Add(self.panel1, proportion=1, flag=wx.EXPAND) 
     self.sizer1.Add(self.panel2, proportion=1, flag=wx.EXPAND) 
     self.sizer2.Add(self.panel3, proportion=1, flag=wx.EXPAND) 
     self.sizer2.Add(self.sizer1, proportion=0, flag=wx.EXPAND) 

     self.SetSizerAndFit(self.sizer2)  
     self.Show() 

app = wx.App(False) 
win = MainWindow(None) 
app.MainLoop() 
+0

也不完全。你有3个堆叠的面板。我需要两个并排的面板。 – ccwhite1 2011-04-14 12:08:44

+0

@ ccwhite1 - 更新了代码。 – Fenikso 2011-04-14 13:29:30

+0

这可行,但现在我必须弄清楚如何将它应用到我的例子。感谢您的帮助 – ccwhite1 2011-04-14 13:56:07

0

喜欢这个?

import wx 


class Frame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__ (self, None) 
     self.SetBackgroundColour(wx.GREEN) 

     bSizer1 = wx.BoxSizer(wx.VERTICAL) 

     panel1 = wx.Panel(self) 
     bSizer1.Add(panel1, 1, wx.EXPAND | wx.ALL, 5) 

     bSizer2 = wx.BoxSizer(wx.HORIZONTAL) 

     panel2 = wx.Panel(self, size=(-1, 50)) 
     bSizer2.Add(panel2, 1, wx.EXPAND | wx.ALL, 5) 

     panel3 = wx.Panel(self, size=(-1, 50)) 
     bSizer2.Add(panel3, 1, wx.EXPAND | wx.ALL, 5) 

     bSizer1.Add(bSizer2, 0, wx.EXPAND, 5) 

     self.SetSizer(bSizer1) 


app = wx.PySimpleApp() 
app.TopWindow = f = Frame() 
f.Show() 
app.MainLoop() 

Screenshot

+0

不太。在这个例子中,我只得到一个带有绿色背景的单帧。 – ccwhite1 2011-04-13 19:13:26

+0

为了确保,我在Windows和Linux上试用了三个不同的wxPython版本(2.6,2.8和2.9)。每次我得到正确的输出(如屏幕截图)。也许你以某种方式让底部两个面板有一个0的高度,但我不知道为什么。无论如何,面板并不重要,请尝试使用您的控件进行调整。 – 2011-04-14 05:46:03

+0

它也没有在我的系统上工作。操作系统:Windows XP SP3,Python:2.7.1,wxPython:2.8.11.0。 – Fenikso 2011-04-14 06:35:48