2011-04-13 15 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。你也可以在列表控件後面放置一個間隔器到水平尺寸器中,並使其展開。然後間隔將佔用所有可用空間。