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