我无法找到 QScrollBar 滑块的正确中心(我需要在其上粘贴一个文本小部件以显示滑块的位置)。我尝试通过将滑块的位置除以文档宽度来规范化滑块的位置,然后将其缩放为宽度()。但这并不准确,因为没有考虑到滚动条的装饰和按钮。因此,标签在您拖动时会飘走,不会粘在中心。下面是我当前的代码,它需要以某种方式考虑 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_())