使QTableWidget列扩展到特定宽度并停止扩展

时间:2017-09-16 21:22:42

标签: python python-3.x pyqt pyqt4

我试图以特定的方式自定义QTableWidget,但我并不完全确定如何去做。我希望QTableWidget在展开时根据以下规则进行扩展:

  1. 所有列都会同等扩展,就像setResizeMode (QHeaderView.Stretch)
  2. 的功能一样
  3. 但是,一旦列达到特定宽度,我希望所有列都扩展到最大宽度(比如150像素),剩下的空间将放到最后一列,就像{{3}的功能一样}
  4. 向后缩小表格应遵循相反的规则。

    我已尝试覆盖QTableWidget的resizeEvent,但这似乎不起作用,尤其是在使用setResizeModesetStretchLastSection时。我是否必须更新QHeaderView?我如何实现这一目标?

    我有一个课程,我试图实现这一点。它可以工作,但只有在表格大小更新后才能使用。显示表格大小的过程,我必须自己更新大小,让它重新应用我想要的大小调整属性。

    class DataTable(QTableWidget):
    
        def __init__(self, data, header):
            # Call the super class method
            super().__init__(6,4) # Make if 6 rows by 4 columns for this example
    
            # Put the data in the table
            # Removed from MWE
    
            # Configure the table properties
            self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
            self.horizontalHeader().setResizeMode(QHeaderView.Stretch)
            #self.horizontalHeader().setStretchLastSection(True)
            self.resizeColumnsToContents()
            self.resizeRowsToContents()
            self.setMinimumWidth(self.horizontalHeader().length()+self.verticalHeader().width())#, self.verticalHeader().length() + self.horizontalHeader().height())
    
    
        def resizeEvent(self, event):
            if self.columnWidth(3) > 100: # 3 is the last column in this MWE
                for i in range(3):
                    self.horizontalHeader().setResizeMode(i,QHeaderView.Fixed)
                self.horizontalHeader().setResizeMode(3,QHeaderView.Stretch)
            else:
                for i in range(3):
                    self.horizontalHeader().setResizeMode(i,QHeaderView.Stretch)
                self.horizontalHeader().setResizeMode(3,QHeaderView.Stretch)
    
            super().resizeEvent(event)
    

0 个答案:

没有答案