4

我在 wx.LC_REPORT 模式下使用了一些 wx.ListCtrl 类,并通过 ListCtrlAutoWidthMixin 进行了扩充。

问题是:当用户双击列分隔符(自动调整列大小)时,列宽设置为与内容的宽度匹配。这是由 wx 库完成的,并在控件为空时将列的大小调整为仅几个像素。

我试着打电话

self.SetColumnWidth(colNumber, wx.LIST_AUTOSIZE_USEHEADER)

在创建列表时,它只是设置初始列宽,而不是允许的最小宽度。

有人成功设置列最小宽度吗?

编辑:尝试捕捉

wx.EVT_LEFT_DCLICK

没有成功。用户双击列分隔符时不会生成此事件。也试过了

wx.EVT_LIST_COL_END_DRAG

此事件通常会生成两次,用于双击,但我看不到如何检索有关新大小的信息,或者如何区分双击和拖放。有人有其他想法吗?

4

2 回答 2

3

老实说,我已经停止使用原生 wx.ListCtrl 转而使用ObjectListView。有一点学习曲线,但有很多例子。 对你的问题很感兴趣。

于 2008-12-19T12:44:05.817 回答
1

好的,经过一番努力,我找到了解决方法。从设计的角度来看它很丑陋,但对我来说已经足够好了。

这就是它的工作原理:

  1. 存储列的初始宽度。

    self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER)
    
    self.__columnWidth[colNum] = self.GetColumnWidth(c)
    
  2. 为更新 UI 事件注册处理程序。

    wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
    
  3. 并编写处理函数。

    def onUpdateUI(self, evt):
        for colNum in xrange(0, self.GetColumnCount()-1):
            if self.GetColumnWidth(colNum) < self.__columnWidth[colNum]:
                self.SetColumnWidth(colNum, self.__columnWidth[colNum])
        evt.Skip()
    

self.GetColumnCount () - 1是故意的,所以最后一列没有调整大小。我知道这不是一个优雅的解决方案,但它对我来说已经足够好了——你不能通过双击分隔线来使列太小(事实上——你根本不能这样做)并在之后双击分隔线最后一列调整最后一列的大小以适合列表控件的宽度。

不过,如果有人知道更好的解决方案,请发布。

于 2008-12-19T08:38:07.550 回答