问题描述
||
我想限制列表控件框的大小。让我们采用以下代码:
import wx
class Students(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,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,\'studs\')
app.MainLoop()
如果将水平框大小调整器的比例设为= 0,则如下所示:
hBox.Add(self.list,wx.EXPAND)
然后有一个不同的问题。比例= 1的问题是\'Age \'列之后,列表控制框有很多空白要占用不存在的第三列。
比例= 0的问题是宽度太短。
我只想显示带有\'Name \'和\'Age \'列的列表控件框,并保留其余空间。我怎么做?
解决方法
您可以手动设置列表控件的宽度,然后将比例设置为0。
列的宽度可以手动设置:
import wx
class MainWindow(wx.Frame):
def __init__(self,*args,**kwargs):
wx.Frame.__init__(self,**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,**kwargs):
wx.ListCtrl.__init__(self,**kwargs)
listmix.ListCtrlAutoWidthMixin.__init__(self)
class MainWindow(wx.Frame):
def __init__(self,**kwargs)
self.panel = wx.Panel(self)
self.panel.SetBackgroundColour(wx.GREEN)
self.list = TestListCtrl(self,-1))
self.list.InsertColumn(0,\'Age\')
self.sizer = wx.BoxSizer()
self.sizer.Add(self.list,400))
self.Show()
app = wx.App(False)
win = MainWindow(None)
app.MainLoop()
,如果您不想调整控件的大小,请不要使用wx.EXPAND。您还可以在列表控件之后,在水平尺寸调整器中放置一个分隔符,并使其展开。然后,垫片将占据所有可用空间。