PyQt qtablewidget改变垂直滚动条的位置
PyQt tablewidget change location of vertical scroll bar
我在 window 中有一个 QTableWidget。目前,table 的滚动条一直到 table 的 headers 的顶部:
但是,我希望滚动条从 headers 下面开始,基本上是在 y 轴上向下移动它。
我需要它从下图中滚动条的位置开始:
有人知道我该怎么做吗?
最简单的解决方案是在 table 调整大小时设置滚动条的几何形状:
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()
的基础实现。
如果您不想子类化,请为 table 添加一个事件过滤器:
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)
我在 window 中有一个 QTableWidget。目前,table 的滚动条一直到 table 的 headers 的顶部:
但是,我希望滚动条从 headers 下面开始,基本上是在 y 轴上向下移动它。 我需要它从下图中滚动条的位置开始:
有人知道我该怎么做吗?
最简单的解决方案是在 table 调整大小时设置滚动条的几何形状:
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()
的基础实现。
如果您不想子类化,请为 table 添加一个事件过滤器:
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)