首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复此ListCtrl的布局

修复此ListCtrl的布局
EN

Stack Overflow用户
提问于 2012-06-16 11:06:31
回答 2查看 592关注 0票数 0

我知道设置布局有很多设置。这是一个固定尺寸的ListCtrl在水平筛内。

这个绝对大小要么显示剩余空间,要么根据列数太小。

绘制ListCtrl的布局命令是什么?

如何使ListCtrl更有响应性,使其:

  • 在不需要调整大小的情况下,一眼就可以显示来自许多列的数据。
  • 在不同的GUI和大小上不会变坏

承载列表的面板的代码列表:

代码语言:javascript
复制
class CalcPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        self.lc = wx.ListCtrl(self, -1, size=(200,200), style=wx.LC_REPORT)
        self.lc.InsertColumn(0, 'State')
        self.lc.InsertColumn(1, 'Capital')
        #self.lc.SetColumnWidth(0, 140)
        #self.lc.SetColumnWidth(1, 153)
    #self.list_ctrl.Show()

        self.sizer = wx.BoxSizer(wx.HORIZONTAL)

        btn = wx.Button(self, label="Add Line")

        self.sizer.Add(btn)
        self.sizer.Add(self.lc, 1, wx.LEFT | wx.TOP | wx.GROW)
        self.SetSizer(self.sizer)
        self.Fit()

    def InitUI(self):
    pass
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-18 11:20:59

你看过wx.lib.mixins.listctrl.ListCtrlAutoWidthMixin

如果您继承了wx.lib.mixins.listctrl.ListCtrlAutoWidthMixinwx.ListCtrl,并在__init__方法中调用了类__init__,那么最后一列将通过调整大小事件自动调整大小。

您还可以用setResizeColumn更改哪个列自动调整大小。

票数 2
EN

Stack Overflow用户

发布于 2012-06-17 01:32:28

我提交了一个完全错误的答案,因为我读得不够好。为了弥补这个错误,我做了一些研究,我认为我有一个可行的答案。

检查wx.ListCtrl API接口,我找到了一个方法SetColumnWidth(self, col, width),我认为它完全可以做您想做的事情。

你说你的wx.ListCtrl是固定宽度的?那样的话..。

代码语言:javascript
复制
lcWidth = 200
lcHeight = 200

self.lc = wx.ListCtrl(self, -1, size=(lcWidth,lcHeight), style=wx.LC_REPORT)
self.lc.InsertColumn(0, 'State')
self.lc.InsertColumn(1, 'Capital')

stateWidth = self.lc.GetColumnWidth(0)
self.lc.SetColumnWidth(1, (lcWidth - stateWdith))

顺便说一句,如果您希望您的wx.ListCtrl保持固定大小,您应该从您的self.sizer.Add()调用中删除wx.GROW标志。wx.GROW将调整项目的大小,使其填充所有可用空间,而不是您想要的空间。

代码语言:javascript
复制
self.sizer.Add(self.lc, 1, wx.LEFT | wx.TOP)

如果您的wx.ListCtrl不是固定宽度,则可以声明一个自定义wx.ListCtrl来相应地处理此大小。

代码语言:javascript
复制
class ResizingColListCtrl (wx.ListCtrl):
    def __init__(self, *args, **kwargs):
        wx.ListCtrl.__init__(self, *args, **kwargs)

        self.sizeColumns()

        self.Bind(EVT_SIZE, self.sizeColumns)

    def sizeColumns(event=None)
        width = self.GetSize()[0]
        numCols = self.GetColumnCount()

        for i in range(numCols):
             self.SetColumnWidth(i, width/numCols) #set your column width to whatever proportions you want

        if event:
            event.Skip() #since this is a wx.EVT_SIZE, this line is important

据我所知,wxPython本机没有这种功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11062864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档