QScrollBar简介
QScrollbar滚动条控件和QSlider的行为相似,它们都继承自QAbstractSlider, 都是提供在一定范围内数值变化的交互控件,但它们的外观表现不一样,QSlider用于控制时间变化,比如播放器,有一定时长,用QSlider就非常贴切。QScrollbar常用于空间位置的变化,比如,一幅大的图像,在屏幕上只能显示其中一部分,就可以使用滚动条来控制。
和QSlider类似,QScrollbar提供垂直方向和水平方向的滚动条。
QScrollbar常用方法:
- setMinimum(): 设置滚动条的最小值
- setMaximum(): 设置滚动条的最大值
- setSingleStep(): 设置滚动条的步长
- setValue(): 设置滚动条的值
- value(): 获得滚动条控件的值
QScrollbar中的常用信号:
- valueChanged: 当滑块的值发生改变时发射此信号,此信号是最常用的
- sliderPressed: 当用户按下滑块时发射此信号
- sliderMoved: 当用户拖动滑块时发射此信号
- sliderReleased: 当用户释放滑块时发射此信号
QScrollbar类继承关系:
测试QScrollbar
创建文件qscroolbar.py, 代码如下:
import sys
import os
from PyQt5 import QtCore, QtGui,QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QScrollBar,QSpacerItem, QSizePolicy, QVBoxLayout, QHBoxLayout, QFormLayout)
class DemoScrollBar(QWidget):
def __init__(self, parent=None):
super(DemoScrollBar, self).__init__(parent)
self.setWindowTitle("实战PyQt5: QScrollBar Demo!")
self.resize(440, 300)
self.disp_w = 400
self.disp_h = 280
self.pos_horz = 0
self.pos_vert = 0
self.pix = QPixmap("d:/1.jpg")
# self.pix = QPixmap(os.path.dirname(__file__) + "d:/1.jpg")
img_w = self.pix.width()
img_h = self.pix.height()
self.disp_img = QLabel(self)
self.disp_img.setFixedSize(self.disp_w, self.disp_h)
vBar = QScrollBar(Qt.Vertical, self)
vBar.setRange(0, img_h - self.disp_h)
vBar.valueChanged.connect(self.vertPosChanged)
hBar = QScrollBar(Qt.Horizontal, self)
hBar.setRange(0, img_w - self.disp_w)
hBar.setFixedWidth(self.disp_w)
hBar.valueChanged.connect(self.horzPosChanged)
fLayout = QFormLayout(self)
fLayout.setWidget(0, QFormLayout.LabelRole, self.disp_img)
fLayout.setWidget(0, QFormLayout.FieldRole, vBar)
fLayout.setWidget(1, QFormLayout.LabelRole, hBar) #初始化显示区域
self.disp_img.setPixmap(self.pix.copy(self.pos_horz, self.pos_vert, self.disp_w, self.disp_h))
self.setLayout(fLayout)
def horzPosChanged(self, pos):
print(pos)
self.pos_horz = pos
self.disp_img.setPixmap(self.pix.copy(self.pos_horz, self.pos_vert, self.disp_w, self.disp_h))
def vertPosChanged(self, pos):
print(pos)
self.pos_vert = pos
self.disp_img.setPixmap(self.pix.copy(self.pos_horz, self.pos_vert, self.disp_w, self.disp_h))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoScrollBar()
window.show()
sys.exit(app.exec())