PyQt5 第五章 控件(二)

5.2 滑块控件

零基础入门玩转 PyQt5》 邀请码: LWskm3AS

5.2.1 滑块

程序展示

本例中,用一个滑块和一个标签展示,滑块控制标签(的值)

import sys
from PyQt5.QtWidgets import QWidget, QSlider, QLabel, QApplication
from PyQt5.QtCore import Qt

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.label = QLabel(self)
        self.label.setText('静音')
        self.label.setGeometry(160, 40, 80, 30)
        self.initUI()

    def initUI(self):

        slider = QSlider(Qt.Horizontal, self)
        slider.setFocusPolicy(Qt.NoFocus)
        slider.setGeometry(30, 40, 100, 30)
        slider.valueChanged.connect(self.changeValue)

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QSlider')
        self.show()

    def changeValue(self, value):

        if value == 0:
            self.label.setText('静音')
        elif 0 < value <= 30:
            self.label.setText('小音')
        elif 30 < value <= 80:
            self.label.setText('中音')
        else:
            self.label.setText('大音')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    e = Example()
    sys.exit(app.exec_())

程序预览:

在这里插入图片描述

代码解释

创建一个水平的QSlider

slider = QSlider(Qt.Horizontal, self)

将滑块设置成不聚焦(就是没有焦点)

slider.setFocusPolicy(Qt.NoFocus)

valueChanged信号跟changeValue()方法关联起来

slider.valueChanged.connect(self.changeValue)

5.2.2 进度条

QProgressBar组件提供了水平和垂直两种进度条,进度条可以设置最大值和最小值,默认情况是0~99

程序展示

本例中,创建了一个水平的进度条和一个按钮,这个按钮控制进度条的开始和停止

import sys
from PyQt5.QtWidgets import QWidget, QProgressBar, QPushButton, QApplication
from PyQt5.QtCore import QBasicTimer

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.pbar = QProgressBar(self)
        self.pbar.setGeometry(20, 20, 240, 20)

        self.b = QPushButton('Start', self)
        self.b.setGeometry(20, 50, 100, 30)
        self.b.clicked.connect(self.action)

        self.timer = QBasicTimer()
        self.step = 0

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QProgressBar')
        self.show()

    def timerEvent(self, event):

        if self.step >= 100:
            self.timer.stop()
            self.b.setText('finished')
            return

        self.step += 1
        self.pbar.setValue(self.step)

    def action(self):

        if self.timer.isActive():
            self.timer.stop()
            self.b.setText('start')
        else:
            self.timer.start(100, self)
            self.b.setText('stop')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    e = Example()
    sys.exit(app.exec_())

程序预览:

在这里插入图片描述

代码解释

创建一个QProgressBar对象

self.pbar = QProgressBar(self)

用时间控制进度条

self.timer = QtCore.QBasicTimer()

调用start()方法加载一个时间事件,这个方法有两个参数:过期时间和事件接收者

self.timer.start(100, self)

每个QObject对象都有一个timerEvent()事件处理函数,为了触发事件,重写这个方法

def timerEvent(self, event):
  
    if self.step >= 100:
    
        self.timer.stop()
        self.b.setText('finished')
        return
        
    self.step += 1
    self.pbar.setValue(self.step)

里面的doAction()方法是用来控制开始和停止的。

def doAction(self):
  
    if self.timer.isActive():
        self.timer.stop()
        self.b.setText('start')
        
    else:
        self.timer.start(100, self)
        self.b.setText('stop')

目录   下一篇 第五章 控件(三)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值