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

 

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