QScrollBar のスライダーの正しい中心を見つけるのに問題があります (スライダーの位置を表示するには、テキスト ウィジェットを貼り付ける必要があります)。スライダーの位置をドキュメントの幅で割って正規化し、次に width() でスケーリングしてみました。しかし、スクロール バーの装飾とボタンが考慮されていないため、これは正確ではありません。そのため、ドラッグするとラベルがはずれ、中心にくっつきません。以下は、スクロール領域の正しい開始位置と終了位置を見つけるために QScrollBar のボタン、フレームなどを何らかの形で考慮する必要がある現在のコードです。誰か助けてくれませんか?
import sys
from PySide.QtGui import *
from PySide.QtCore import *
class PageScroller(QScrollBar):
'''Set the total number of pages.'''
def __init__(self, parent=None):
super(PageScroller, self).__init__(parent)
self.pageIndicator = QLabel('|', parent)
self.valueChanged.connect(self.updateSlider)
self.setOrientation(Qt.Orientation.Horizontal)
self.setPageStep(1)
def updateSlider(self, event):
scrollAreaWidth = self.maximum() - self.minimum() + self.pageStep()
sliderPos = (self.sliderPosition() + self.pageStep()/2.0) / float(scrollAreaWidth) * self.width()
indicatorPos = QPoint(sliderPos - self.pageIndicator.width()/2, -self.pageIndicator.height())
self.pageIndicator.move(self.mapToParent(indicatorPos))
self.update()
if __name__ == '__main__':
app = QApplication(sys.argv)
#app.setStyle('plastique') # tyhis makes the sliding more obvious
mainWindow = QWidget()
layout = QVBoxLayout(mainWindow)
s = PageScroller(mainWindow)
layout.addWidget(s)
mainWindow.resize(400, 100)
mainWindow.show()
sys.exit(app.exec_())