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(os.path.dirname(__file__) + "/qt_py.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):
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):
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())
运行结果如下图:
测试QScrollBar
本文知识点
- QScrollBar的基本用法;
- QPixmap加载图片;
- QPixmap复制图片的部分区域。