python - 通过鼠标滚轮平滑滚动 QTableWidget
问题描述
我试过.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
哪个效果很好,但需要用户将鼠标移动到滚动条并使用它来体验平滑滚动,但鼠标滚轮的工作方式是跳跃滚动的旧方式,我想知道是否有办法让滚动在使用时表现相同鼠标滚轮?
解决方案
您应该使用 self.widget.verticalScrollBar().setSingleStep(step)。
QTableWidget继承了QTableView,继承了QAbstractItemView,继承了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())
您可以增加/减少微调框中的步长以查看其行为方式。我希望这是你所要求的。
推荐阅读
- java - 使用 JAVA 和正则表达式查找 URL 的一部分
- ios - 已下载 PDF 文件但找不到
- google-colaboratory - google colab 是否永久更改文件
- swipe - ios 13 中的平移事件未按预期运行
- c# - 从阿拉伯语单词的第一个字符串中删除“ال”或“اَلْ”或“الْ”或“اَل”
- c - 如何从 C 程序连接到 IBM Db2 Event Store?
- azure-devops - 如何将更多测试与 azure devops 中的测试用例相关联
- json - TypeError: errorResponse.json is not a function - 试图将保留响应删除为 Json 但仍然面临问题
- autocomplete - 如何在 emacs 中使用 ELPY 进行自动完成工作?
- python-3.x - 关于给定示例中 numpy 中的数组索引