pyqt 滚动条

 

QScrollBar简介

QScrollbar滚动条控件和QSlider的行为相似,它们都继承自QAbstractSlider, 都是提供在一定范围内数值变化的交互控件,但它们的外观表现不一样,QSlider用于控制时间变化,比如播放器,有一定时长,用QSlider就非常贴切。QScrollbar常用于空间位置的变化,比如,一幅大的图像,在屏幕上只能显示其中一部分,就可以使用滚动条来控制。

和QSlider类似,QScrollbar提供垂直方向和水平方向的滚动条。

QScrollbar常用方法:

  • setMinimum(): 设置滚动条的最小值
  • setMaximum(): 设置滚动条的最大值
  • setSingleStep(): 设置滚动条的步长
  • setValue(): 设置滚动条的值
  • value(): 获得滚动条控件的值

QScrollbar中的常用信号:

  • valueChanged: 当滑块的值发生改变时发射此信号,此信号是最常用的
  • sliderPressed: 当用户按下滑块时发射此信号
  • sliderMoved: 当用户拖动滑块时发射此信号
  • sliderReleased: 当用户释放滑块时发射此信号

QScrollbar类继承关系:

c1b7e07c9d36c71a243e7f7478e44b26.png

测试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())

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章