gpt4 book ai didi

python - 通过鼠标滚轮平滑滚动 QTableWidget

转载 作者:行者123 更新时间:2023-12-02 19:15:31 26 4
gpt4 key购买 nike

我尝试了 .setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) ,效果很好,但需要用户将鼠标移动到滚动条并使用它来体验平滑滚动,但鼠标滚轮以旧方式工作随着跳跃滚动,我想知道是否有办法使使用鼠标滚轮时的滚动行为相同?

最佳答案

您应该使用 self.widget.verticalScrollBar().setSingleStep(step)。

QTableWidget继承了QTableView,QTableView又继承了QAbstractItemView,QAbstractItemView又继承了QAbstractScrollArea,QAbstractScrollArea有verticalScrollBar()方法,这就把我们带到了继承QAbstractSlider的QScrollBar类,它终于有了setSingleStep(step)方法(也许还有更短的路径?)。

完整代码如下:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Window(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)

self.setWindowTitle("Scrolling QTableWidget smoothly BY MOUSE WHEEL")

label = QLabel("singleStep:")
self.spinbox = QSpinBox()
self.spinbox.setValue(1)
self.spinbox.setMinimum(1)
self.spinbox.setMaximum(200)
self.spinbox.valueChanged.connect(self.on_value_changed)

self.widget = QTableWidget(100, 5)

for i in range(100):
for j in range(5):
self.widget.setItem(i, j, QTableWidgetItem(str(i+j)))

self.widget.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
#self.widget.verticalScrollBar().setSingleStep(1)
self.set_single_step()

spinbox_layout = QHBoxLayout()
spinbox_layout.addStretch()
spinbox_layout.addWidget(label)
spinbox_layout.addWidget(self.spinbox)

layout = QVBoxLayout()
layout.addLayout(spinbox_layout)
layout.addWidget(self.widget)
self.setLayout(layout)

def on_value_changed(self, step):
self.set_single_step()

def set_single_step(self):
self.widget.verticalScrollBar().setSingleStep(self.spinbox.value())

if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.resize(800, 600)
window.show()
sys.exit(app.exec())

您可以增加/减少旋转框中的步骤以查看其行为方式。我希望这就是您所要求的。

关于python - 通过鼠标滚轮平滑滚动 QTableWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63767613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com