2011-04-13 59 views
2

我想限制列表控件框的大小。让我们看看下面的代码:限制wxpython中wxListCtrl的大小

import wx 

class Students(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title, size=(380, 230)) 

     hbox = wx.BoxSizer(wx.HORIZONTAL) 
     panel = wx.Panel(self, -1) 

     self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT) 
     self.list.InsertColumn(0, 'name') 
     self.list.InsertColumn(1, 'age')   

     hbox.Add(self.list, 1,wx.EXPAND) 
     panel.SetSizer(hbox) 

     self.Centre() 
     self.Show(True) 

app = wx.App() 
Students(None, -1, 'studs') 
app.MainLoop() 

如果我让水平框定径机的比例= 0,这样的:

hbox.Add(self.list, 0,wx.EXPAND) 

则存在不同的问题。比例= 1的问题是,在“年龄”列之后,列表控制框为第三列不存在而存在大量空白空间。 比例= 0的问题是它的宽度太短。 我想仅显示带有“名称”和“年龄”列的列表控制框,并保存剩余的空间。我怎么做?

回答

4

您可以手动设置列表控件的宽度,然后设置比例为0

列的宽度可以手动设置:

import wx 

class MainWindow(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 
     self.panel = wx.Panel(self) 
     self.panel.SetBackgroundColour(wx.GREEN) 

     self.list = wx.ListCtrl(self, style=wx.LC_REPORT, size=(200, -1)) 
     column_size = self.list.GetSize()[0]/2 - 2 
     self.list.InsertColumn(0, 'Name') 
     self.list.InsertColumn(1, 'Age') 
     self.list.SetColumnWidth(0, column_size) 
     self.list.SetColumnWidth(1, column_size) 

     self.sizer = wx.BoxSizer() 
     self.sizer.Add(self.list, proportion=0, flag=wx.EXPAND) 
     self.sizer.Add(self.panel, proportion=1, flag=wx.EXPAND) 

     self.SetSizerAndFit(self.sizer) 
     self.SetSize((600, 400))  
     self.Show() 

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

,或者可以使用ListCtrlAutoWidthMixin:

import wx 
import wx.lib.mixins.listctrl as listmix 

class TestListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin): 
    def __init__(self, *args, **kwargs): 
     wx.ListCtrl.__init__(self, *args, **kwargs) 
     listmix.ListCtrlAutoWidthMixin.__init__(self) 

class MainWindow(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 
     self.panel = wx.Panel(self) 
     self.panel.SetBackgroundColour(wx.GREEN) 

     self.list = TestListCtrl(self, style=wx.LC_REPORT, size=(200, -1)) 
     self.list.InsertColumn(0, 'Name') 
     self.list.InsertColumn(1, 'Age') 

     self.sizer = wx.BoxSizer() 
     self.sizer.Add(self.list, proportion=0, flag=wx.EXPAND) 
     self.sizer.Add(self.panel, proportion=1, flag=wx.EXPAND) 

     self.SetSizerAndFit(self.sizer) 
     self.SetSize((600, 400))  
     self.Show() 

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

如果您不希望控件调整大小,请不要使用wx.EXPAND。你也可以在列表控件后面放置一个间隔器到水平尺寸器中,并使其展开。然后间隔将占用所有可用空间。