【问题标题】:PyQt tablewidget change location of vertical scroll barPyQt tablewidget改变垂直滚动条的位置
【发布时间】:2021-03-29 05:41:41
【问题描述】:

我在一个窗口中有一个 QTableWidget。目前,表格的滚动条一直到表格标题的顶部:

但是,我希望滚动条从标题下方开始,基本上是在 y 轴上向下移动。 我需要它从下图中滚动条的位置开始:

有人知道我该怎么做吗?

【问题讨论】:

    标签: python qt user-interface pyqt qtablewidget


    【解决方案1】:

    最简单的解决方案是在表格调整大小时设置滚动条的几何形状:

    class Table(QtWidgets.QTableWidget):
        # ...
        def resizeEvent(self, event):
            super().resizeEvent(event)
            self.verticalScrollBar().setGeometry(
                bar.geometry().adjusted(
                    0, self.horizontalHeader().height(), 0, 0))
    

    另一种类似的可能性是使用添加在滚动条顶部的滚动条小部件,但概念几乎相同:

    class Table(QtWidgets.QTableWidget):
        def __init__(self):
            super().__init__(20, 20)
            self.scrollBarSpacer = QtWidgets.QWidget()
            self.addScrollBarWidget(self.scrollBarSpacer, QtCore.Qt.AlignTop)
    
        def resizeEvent(self, event):
            super().resizeEvent(event)
            self.scrollBarSpacer.setFixedHeight(self.horizontalHeader().height())
    

    请注意,在这两种情况下,都必须首先调用 resizeEvent() 的基本实现。

    如果不想子类化,为表添加事件过滤器:

    class SomeWindow(QtWidgets.QMainWindow):
        def __init__(self):
            # ...
            self.table.installEventFilter(self)
    
        def eventFilter(self, source, event):
            if source == self.table and event.type() == QtCore.QEvent.Resize:
                # let the table handle the event
                source.event(event)
                source.verticalScrollBar().setGeometry(
                    source.verticalScrollBar().geometry().adjusted(
                        0, self.horizontalHeader().height(), 0, 0))
                return True
            return super().eventFilter(source, event)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多