【发布时间】:2021-03-29 05:41:41
【问题描述】:
我在一个窗口中有一个 QTableWidget。目前,表格的滚动条一直到表格标题的顶部:
但是,我希望滚动条从标题下方开始,基本上是在 y 轴上向下移动。 我需要它从下图中滚动条的位置开始:
有人知道我该怎么做吗?
【问题讨论】:
标签: python qt user-interface pyqt qtablewidget
我在一个窗口中有一个 QTableWidget。目前,表格的滚动条一直到表格标题的顶部:
但是,我希望滚动条从标题下方开始,基本上是在 y 轴上向下移动。 我需要它从下图中滚动条的位置开始:
有人知道我该怎么做吗?
【问题讨论】:
标签: python qt user-interface pyqt qtablewidget
最简单的解决方案是在表格调整大小时设置滚动条的几何形状:
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)
【讨论】: