PySide6 表格向上滚动实现:使用滚轮事件控制右侧滚动条
下面是一个使用 PySide6 的示例代码,实现了在 TableWidget 中拖动表项往上时能够滚动右侧滚动条:
from PySide6.QtWidgets import QWidget, QVBoxLayout, QTableWidget, QTableWidgetItem, QAbstractItemView, QHeaderView, QScrollBar
from PySide6.QtCore import Qt
class MyTableWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.tableWidget = QTableWidget()
self.tableWidget.setColumnCount(3)
self.tableWidget.setRowCount(10)
self.tableWidget.setHorizontalHeaderLabels(['Column 1', 'Column 2', 'Column 3'])
self.tableWidget.verticalHeader().setVisible(False)
self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.tableWidget.setSelectionMode(QAbstractItemView.NoSelection)
self.tableWidget.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
for row in range(10):
for col in range(3):
item = QTableWidgetItem(f'Item {row}, {col}')
self.tableWidget.setItem(row, col, item)
self.tableWidget.resizeColumnsToContents()
self.tableWidget.horizontalHeader().setStretchLastSection(True)
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
layout.addWidget(self.tableWidget)
self.setLayout(layout)
def wheelEvent(self, event):
delta = event.angleDelta().y()
scrollbar = self.tableWidget.verticalScrollBar()
current_value = scrollbar.value()
scrollbar.setValue(current_value - delta)
if __name__ == '__main__':
import sys
from PySide6.QtWidgets import QApplication
app = QApplication(sys.argv)
tableWidget = MyTableWidget()
tableWidget.show()
sys.exit(app.exec())
在这个示例中,我们创建了一个自定义的 QWidget,并在其中放置了一个 QTableWidget。我们设置了 QTableWidget 的行数为 10,列数为 3,并给每个表格项设置了一个文本值。
我们重写了 QWidget 的 wheelEvent 方法,当鼠标滚轮事件发生时,我们获取滚轮的滚动方向和滚动距离。然后,我们通过 tableWidget 的 verticalScrollBar() 方法获取到垂直滚动条,并根据滚轮滚动距离来调整滚动条的值,从而实现表项往上拖动时能够滚动右侧滚动条。
最后,我们创建了一个 QApplication 对象,并将 MyTableWidget 作为主窗口显示出来。
请注意,示例代码中使用了 QHeaderView 和 QScrollBar 来调整表格的布局和滚动条的设置。你可以根据自己的需求进行调整。
原文地址: https://www.cveoy.top/t/topic/qqqA 著作权归作者所有。请勿转载和采集!