实战PyQt5: 027-滚动条控件QScrollBar

QScrollBar简介

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

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

QScrollbar常用方法:

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

QScrollbar中的常用信号:

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

QScrollbar类继承关系:

实战PyQt5: 027-滚动条控件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()) 

运行结果如下图:

实战PyQt5: 027-滚动条控件QScrollBar

测试QScrollBar

本文知识点

  • QScrollBar的基本用法;
  • QPixmap加载图片;
  • QPixmap复制图片的部分区域。

前一篇: 实战PyQt5: 026-滑动条控件QSlider

  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一套赛博朋克风格的 qss 样式,包含了 PyQt6 的所有控件: ```qss /* 设置全局字体 */ * { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } /* 设置全局颜色变量 */ :root { --color-primary: #00d2ff; --color-secondary: #a8c0ff; --color-tertiary: #ffb8c6; --color-text: #fff; } /* 设置窗口背景 */ QWidget { background-color: #111; } /* 设置按钮样式 */ QPushButton { background-color: var(--color-primary); border: none; border-radius: 5px; color: var(--color-text); font-size: 14px; padding: 8px 16px; } QPushButton:hover { background-color: var(--color-secondary); } QPushButton:pressed { background-color: var(--color-tertiary); } /* 设置标签样式 */ QLabel { color: var(--color-text); font-size: 16px; } /* 设置文本框样式 */ QLineEdit { background-color: #333; border: none; border-radius: 5px; color: var(--color-text); font-size: 14px; padding: 8px; } QLineEdit:focus { border: 2px solid var(--color-primary); } /* 设置滚动条样式 */ QScrollBar:vertical { background-color: #333; border-radius: 5px; width: 16px; } QScrollBar::handle:vertical { background-color: var(--color-primary); border-radius: 5px; min-height: 20px; } QScrollBar::add-line:vertical { height: 16px; subcontrol-position: bottom; subcontrol-origin: margin; } QScrollBar::sub-line:vertical { height: 16px; subcontrol-position: top; subcontrol-origin: margin; } QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background-color: none; } /* 设置列表框样式 */ QListWidget { background-color: #333; border: none; border-radius: 5px; color: var(--color-text); } QListWidget::item { padding: 8px; } QListWidget::item:hover { background-color: var(--color-secondary); } /* 设置进度条样式 */ QProgressBar { background-color: #333; border: none; border-radius: 5px; height: 10px; } QProgressBar::chunk { background-color: var(--color-primary); border-radius: 5px; } /* 设置复选框样式 */ QCheckBox { color: var(--color-text); } QCheckBox::indicator { width: 20px; height: 20px; } QCheckBox::indicator:unchecked { border: 2px solid var(--color-text); } QCheckBox::indicator:checked { background-color: var(--color-primary); border: none; } /* 设置单选框样式 */ QRadioButton { color: var(--color-text); padding-left: 20px; } QRadioButton::indicator { width: 20px; height: 20px; } QRadioButton::indicator:unchecked { border: 2px solid var(--color-text); } QRadioButton::indicator:checked { background-color: var(--color-primary); border: none; } /* 设置下拉框样式 */ QComboBox { background-color: #333; border: none; border-radius: 5px; color: var(--color-text); font-size: 14px; padding: 8px; } QComboBox::drop-down { border: none; } QComboBox::down-arrow { image: url("arrow-down.png"); width: 16px; height: 16px; } QComboBox QAbstractItemView { background-color: #333; border: none; border-radius: 5px; color: var(--color-text); font-size: 14px; } QComboBox QAbstractItemView::item { padding: 8px; } QComboBox QAbstractItemView::item:hover { background-color: var(--color-secondary); } /* 设置滑块样式 */ QSlider::groove:horizontal { background-color: #333; border-radius: 5px; height: 10px; } QSlider::handle:horizontal { background-color: var(--color-primary); border: none; border-radius: 5px; width: 20px; height: 20px; margin: -5px 0; } QSlider::add-page:horizontal, QSlider::sub-page:horizontal { background-color: none; } ``` 你可以将这段代码保存为 `cyberpunk.qss` 文件,并在程序中加载使用: ```python import sys from PyQt6.QtWidgets import QApplication, QWidget from PyQt6.QtGui import QPalette, QColor, QPixmap from PyQt6.QtCore import Qt app = QApplication(sys.argv) # 加载 qss 样式 with open('cyberpunk.qss', 'r') as f: app.setStyleSheet(f.read()) # 创建窗口 window = QWidget() window.setWindowTitle('Cyberpunk Style') window.setGeometry(100, 100, 400, 300) window.show() sys.exit(app.exec()) ``` 希望这个样式能满足你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值