如何设置和保持最小宽度?

时间:2008-12-18 08:28:49

标签: python wxpython wxwidgets listctrl

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

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

我试着打电话

  

self.SetColumnWidth(colNumber,wx.LIST_AUTOSIZE_USEHEADER)

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

任何人都成功设置了列最小宽度?

编辑:尝试捕捉

 wx.EVT_LEFT_DCLICK 

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

wx.EVT_LIST_COL_END_DRAG 

生成此事件,通常是两次,双击,但我不知道如何检索有关新大小的信息,或如何区分双击和拖放。任何人都有其他想法吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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()
    
  4. self.GetColumnCount() - 1 是故意的,因此不会调整最后一列的大小。我知道这不是一个优雅的解决方案,但它对我来说效果很好 - 你不能通过双击分隔器使列太小(事实上 - 你完全不能这样做)并且双击分隔符之后最后一列调整最后一列的大小以适合列表控件宽度。

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