限制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的问题是\'Age \'列之后,列表控制框有很多空白要占用不存在的第三列。 比例= 0的问题是宽度太短。 我只想显示带有\'Name \'和\'Age \'列的列表控件框,并保留其余空间。我怎么做?     
已邀请:
您可以手动设置列表控件的宽度,然后将比例设置为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()
    
如果您不想调整控件的大小,请不要使用wx.EXPAND。您还可以在列表控件之后,在水平尺寸调整器中放置一个分隔符,并使其展开。然后,垫片将占据所有可用空间。     

要回复问题请先登录注册