以下是使用 PySide6 的示例代码,实现了表项往上拖动时能滚动右侧滚动条,并且可以选中表项:

from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建表格
        self.table_widget = QTableWidget()
        self.table_widget.setColumnCount(5)
        self.table_widget.setRowCount(10)

        # 添加表项
        for row in range(10):
            for col in range(5):
                item = QTableWidgetItem(f'Item {row}, {col}')
                self.table_widget.setItem(row, col, item)

        # 设置布局
        layout = QVBoxLayout()
        layout.addWidget(self.table_widget)

        # 创建主窗口
        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

        # 设置表格属性
        self.table_widget.setVerticalScrollMode(QTableWidget.ScrollPerPixel)
        self.table_widget.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.table_widget.setSelectionMode(QTableWidget.SingleSelection)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Up:
            # 获取当前选中的行
            current_row = self.table_widget.currentRow()
            # 滚动到上一行
            self.table_widget.verticalScrollBar().setValue(self.table_widget.verticalScrollBar().value() - self.table_widget.rowHeight(current_row))

app = QApplication([])
window = MainWindow()
window.show()
app.exec()

在这个示例代码中,我们创建了一个 QTableWidget,并设置了 5 列 10 行的表格。然后通过循环添加了表项。接着,我们将 QTableWidget 放入一个 QVBoxLayout 布局中,并将布局设置为主窗口的中心部件。然后,我们设置了表格的一些属性,包括垂直滚动模式为 ScrollPerPixel,垂直滚动条总是可见,以及选择模式为单选。

在主窗口的 keyPressEvent 事件中,我们捕获了按下上箭头键的事件,并获取当前选中的行。然后,我们使用 QScrollBarsetValue 方法将表格滚动到上一行的位置。这样,当按下上箭头键时,表格会向上滚动,并且右侧的滚动条会跟随滚动。

PySide6 表格项向上拖动滚动右侧滚动条 - 示例代码

原文地址: https://www.cveoy.top/t/topic/qqrg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录