微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

限制wxpython中wxListCtrl的大小

如何解决限制wxpython中wxListCtrl的大小

|| 我想限制列表控件框的大小。让我们采用以下代码
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。您还可以在列表控件之后,在水平尺寸调整器中放置一个分隔符,并使其展开。然后,垫片将占据所有可用空间。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。