私は.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
どれがうまく機能するかを試しましたが、ユーザーがマウスをスクロールバーに移動してそれを使用してスムーズなスクロールを体験する必要がありますが、マウスホイールはジャンピースクロールで古い方法で機能しますマウスホイール?
self.widget.verticalScrollBar()。setSingleStep(step)を使用する必要があります。
QTableWidgetはQTableViewを継承し、QTableはQAbstractItemViewを継承し、QAbstractScrollAreaはメソッドverticalScrollBar()を継承します。
完全なコードは次のとおりです。
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())
スピンボックスのステップを増減して、その動作を確認できます。それがあなたが求めていたことだと思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加