一、图像显示
1.1、增加图标
1.直接创建setWindowIcon(QIcon('灯泡.jpg'))
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5.QtGui import QIconclass MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()# 设置主窗口图标self.setWindowIcon(QIcon('灯泡.jpg'))self.setWindowTitle("QIcon 示例")self.setGeometry(300, 300, 400, 300)if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())
2. 通过pixmap 加载
icon=QIcon()
icon.addPixmap(QPixmap('灯泡.jpg'),QIcon.Normal,QIcon.Off)
QIcon()
: 创建一个新的QIcon
对象。
addPixmap
: 该方法将一个 pixmap(图像)添加到图标。传递的参数包括:
QPixmap('灯泡.jpg')
: 将名为 '灯泡.jpg' 的图像作为 pixmap 加载。
QIcon.Normal
: 指定图标的状态为“正常”。
QIcon.Off
: 指定图标的模式为“关闭”。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5.QtGui import QIcon, QPixmapclass MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()icon=QIcon()icon.addPixmap(QPixmap('灯泡.jpg'),QIcon.Normal,QIcon.Off)self.setWindowIcon(icon)self.setWindowTitle("图片显示")self.setGeometry(300, 300, 400, 300)if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())
3.按钮图标
button = QPushButton('点击我', self)
button.setIcon(QIcon(QPixmap('灯泡.jpg')))
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5.QtGui import QIcon, QPixmapclass MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()# 设置主窗口图标self.setWindowIcon(QIcon('灯泡.jpg'))# 创建一个按钮并设置图标button = QPushButton('点击我', self)button.setIcon(QIcon(QPixmap('灯泡.jpg')))button.setGeometry(100, 100, 200, 50)self.setWindowTitle("QIcon 示例")self.setGeometry(300, 300, 400, 300)if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())
1.2、静态图片显示
self.label_light.setPixmap(QPixmap('灯泡.jpg').scaled(self.label_light.size()))
self.label_light: 这是一个 QLabel 的实例,假设在某个类(例如窗口类)中定义。
setPixmap(): 此方法用于设置 QLabel 中显示的图像。
QPixmap('灯泡.jpg'): 创建一个 QPixmap 对象,用于加载 灯泡.jpg 图像。
scaled(self.label_light.size()): 将图像缩放到与 label_light 大小相同。self.label_light.size() 返回标签的当前大小。
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'pict.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(597, 440)self.label_fan = QtWidgets.QLabel(Form)self.label_fan.setGeometry(QtCore.QRect(320, 190, 261, 241))self.label_fan.setText("")self.label_fan.setObjectName("label_fan")self.label_light = QtWidgets.QLabel(Form)self.label_light.setGeometry(QtCore.QRect(0, 190, 261, 241))self.label_light.setText("")self.label_light.setObjectName("label_light")self.btn_light = QtWidgets.QPushButton(Form)self.btn_light.setGeometry(QtCore.QRect(50, 60, 81, 61))self.btn_light.setObjectName("btn_light")self.btn_fan = QtWidgets.QPushButton(Form)self.btn_fan.setGeometry(QtCore.QRect(420, 60, 91, 61))self.btn_fan.setObjectName("btn_fan")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "图片显示"))self.btn_light.setText(_translate("Form", "开灯"))self.btn_fan.setText(_translate("Form", "动态图"))
1.3、动态图片显示
movie=QMovie()
创建了一个 QMovie 对象,默认是一个空的动画。
movie.setFileName('6259.gif_wh860.gif')
使用 setFileName 方法,将 GIF 动画文件的路径赋值给 QMovie 对象。
self.label_fan.setScaledContents(True)
将 QLabel 的 scaledContents 属性设置为 True,这意味着 QLabel 中的内容(即 GIF 动画)将根据 QLabel 的大小进行缩放。
self.label_fan.setMovie(movie)
将之前配置好的 QMovie 对象设置到 QLabel 上,使其能够展示动画。
movie.start()
调用
start()
方法开始播放 GIF 动画。
from PyQt5.QtWidgets import QWidget,QPushButton,QTextBrowser,QLabel,QTextEdit,QApplication
import sys
from PyQt5.QtGui import QIcon, QPixmap, QMovie
from pict import *
class Pict(QWidget,Ui_Form):def __init__(self):super().__init__()self.setupUi(self)icon=QIcon()icon.addPixmap(QPixmap('灯泡.jpg'),QIcon.Normal,QIcon.Off)self.setWindowIcon(icon)self.slot_init()def slot_init(self):self.btn_light.clicked.connect(self.show_fight)self.btn_fan.clicked.connect(self.show_fan)def show_fight(self):self.label_light.setPixmap(QPixmap('灯泡.jpg').scaled(self.label_light.size()))def show_fan(self):movie=QMovie()movie.setFileName('6259.gif_wh860.gif')self.label_fan.setScaledContents(True)self.label_fan.setMovie(movie)movie.start()if __name__ == '__main__':app = QApplication(sys.argv)windows = Pict()windows.show()# app.exec()sys.exit(app.exec_())
1.4、按钮操作开关灯
from PyQt5.QtWidgets import QWidget,QPushButton,QTextBrowser,QLabel,QTextEdit,QApplication
import sys
from PyQt5.QtGui import QIcon, QPixmap, QMovie
from pict import *
class Pict(QWidget,Ui_Form):def __init__(self):super().__init__()self.setupUi(self)icon=QIcon()icon.addPixmap(QPixmap('灯泡.jpg'),QIcon.Normal,QIcon.Off)self.setWindowIcon(icon)self.slot_init()self.count=0def slot_init(self):self.btn_light.clicked.connect(self.show_fight)self.btn_fan.clicked.connect(self.show_fan)def show_fight(self):if self.count%2==0:self.btn_light.setText('开灯')self.label_light.setPixmap(QPixmap('开灯.png').scaled(self.label_light.size()))else:self.btn_light.setText('关灯')self.label_light.setPixmap(QPixmap('关灯.png').scaled(self.label_light.size()))self.count+=1def show_fan(self):if self.count % 2 == 0:# self.btn_fan.setStyleSheet("border-image:url(绿色.png)")self.btn_fan.setStyleSheet(None)movie=QMovie()movie.setFileName('6259.gif_wh860.gif')self.label_fan.setScaledContents(True)self.label_fan.setMovie(movie)movie.start()else:self.btn_fan.setStyleSheet("border-image:url(背景.png)")self.label_fan.setPixmap(QPixmap('6259.gif_wh860.gif').scaled(self.label_fan.size()))self.count += 1if __name__ == '__main__':app = QApplication(sys.argv)windows = Pict()windows.show()# app.exec()sys.exit(app.exec_())
1.5、按钮背景
1.6、界面背景
self.palette=QPalette()
创建了一个
QPalette
对象,QPalette
是用于设置窗口部件颜色和样式的类。
self.palette.setBrush(QPalette.Background,QBrush(QPixmap('490de2494101804d89f2cc746357062.png').scaled(self.size())))
QPalette.Background:指定要设置背景的角色。
QBrush:用于填充的画刷,使用
QBrush
来定义如何填充背景。QPixmap:加载指定的图像文件,并用
scaled(self.size())
方法将其缩放至当前窗口的大小。
self.setPalette(self.palette)
将配置好的调色板应用到当前窗口或部件,使其背景图像生效。
from PyQt5.QtWidgets import QWidget,QPushButton,QTextBrowser,QLabel,QTextEdit,QApplication
import sys
from PyQt5.QtGui import QIcon, QPixmap, QMovie,QBrush,QPaletteclass Widge(QWidget):def __init__(self):super().__init__()self.setWindowTitle('背景')self.btn=QPushButton("按钮",self)self.btn.setGeometry(100,20,100,30)self.btn.setStyleSheet("border-image:url(背景.png)")self.palette=QPalette()self.palette.setBrush(QPalette.Background,QBrush(QPixmap('490de2494101804d89f2cc746357062.png').scaled(self.size())))self.setPalette(self.palette)if __name__ == '__main__':app = QApplication(sys.argv)windows = Widge()windows.show()# app.exec()sys.exit(app.exec_())
二、定时器
2.1、实时显示系统时间
借助QLabel显示系统时间
实时: 引入QTimer定时器 要使用定时器:
超时时间设置、定时器启动、定时器 信号 系统时间获取: QDateTime类的使用
self.timer = QTimer(self) self.timer.setInterval(1000) self.timer.timeout.connect(self.update_time) self.timer.start()
- self.timer = QTimer(self):创建一个
QTimer
实例,以当前窗口作为父部件,防止定时器在窗口关闭时继续运行。- self.timer.setInterval(1000):设置定时器的时间间隔为 1000 毫秒(1 秒)。
- self.timer.timeout.connect(self.update_time):将定时器的超时信号(即每次到达设定的间隔时)连接到
update_time
方法,以便当计时器到期时该方法被调用。- self.timer.start():启动定时器,使其开始计时。
def update_time(self): self.current_time = QDateTime.currentDateTime().toString("hh:mm:ss") self.show_time.setText(self.current_time)
- self.current_time = QDateTime.currentDateTime().toString("hh:mm:ss"):获取当前的日期和时间并将其格式化为 "hh:mm:ss" 的字符串。
- self.show_time.setText(self.current_time):将当前时间字符串设置为
show_time
标签的文本,更新标签内容以显示新的时间。
# 导入必要的模块
from PyQt5.QtGui import QFont # 导入 QFont 用于设置字体
from PyQt5.QtWidgets import QLabel, QWidget, QApplication # 导入窗口部件
from PyQt5.QtCore import QTime, QTimer, QDateTime # 导入时间和定时器相关的类
import sys # 导入 sys 模块以处理命令行参数 # 创建主窗口类,继承 QWidget
class windows(QWidget): def __init__(self): super().__init__() # 调用父类的构造函数 self.ui_init() # 初始化用户界面 def ui_init(self): # 设置窗口标题 self.setWindowTitle('定时器') # 设置窗口的几何属性:位置和大小 (x, y, width, height) self.setGeometry(500, 500, 520, 550) # 创建 QLabel 用于显示时间,初始文本为 '定时器' self.show_time = QLabel('定时器', self) # 设置标签的字体为 Arial,大小为 25 self.show_time.setFont(QFont('Arial', 25)) # 设置标签的位置和大小 (x, y, width, height) self.show_time.setGeometry(60, 30, 600, 300) # 创建 QTimer 实例,父部件为当前窗口 self.timer = QTimer(self) # 设置定时器的时间间隔为 1000 毫秒(1 秒) self.timer.setInterval(1000) # 连接定时器的超时信号到 update_time 方法 self.timer.timeout.connect(self.update_time) # 启动定时器 self.timer.start() def update_time(self): # 获取当前日期和时间,格式化为 "hh:mm:ss" 字符串 self.current_time = QDateTime.currentDateTime().toString("hh:mm:ss") # 将当前时间更新到 QLabel 中显示 self.show_time.setText(self.current_time) # 程序入口
if __name__ == '__main__': app = QApplication(sys.argv) # 创建 QApplication 实例,传入命令行参数 windows = windows() # 创建主窗口实例 windows.show() # 显示窗口 # app.exec() # 这行代码被注释掉了,因为下面的 sys.exit(app.exec_()) 会执行事件循环 sys.exit(app.exec_()) # 启动应用程序的事件循环,直到窗口关闭
2.2、 倒计时实现
借助QLCDNumber类显示,它提供了一个液晶显示屏(LCD)数字显示部件,可以 用display()方法来显示数字。
每一秒都要更新: 引入QTimer定时器 超时时间设置、定时器启动、定时器信号
倒计时: 需要有计数值, 每一秒数值都要-1, 然后要转成时间的格式显示, 引入 QTime类 将数值类型转成时间格式
def ui_init(self): self.count = 5 # 初始化倒计时的秒数为 5 秒 self.time = QTime(0, 0, 0) # 创建 QTime 对象,初始为 00:00:00 self.star_time = self.time.addSecs(self.count).toString("hh:mm:ss") # 计算倒计时结束时的时间字符串
设置倒计时
self.count = 5
:设置倒计时的初始值为 5 秒。self.time = QTime(0, 0, 0)
:创建一个QTime
对象,表示 00:00:00。self.star_time = self.time.addSecs(self.count).toString("hh:mm:ss")
:计算出倒计时结束时的时间,并将其格式化为字符串。
self.show_lcd = QLCDNumber(self) # 创建 QLCDNumber 用于显示倒计时 self.show_lcd.setDigitCount(8) # 设置显示的数字位数 self.show_lcd.display(self.star_time) # 显示初始时间 self.show_lcd.setGeometry(100, 30, 200, 30) # 设置显示区域的位置和大小 self.btn = QPushButton('开始倒计时', self) # 创建按钮,初始文本为 '开始倒计时' self.btn.setGeometry(120, 80, 160, 30) # 设置按钮的位置和大小 self.btn.clicked.connect(self.star_timeeee) # 连接按钮点击事件到处理方法
创建 LCD 显示器:
self.show_lcd = QLCDNumber(self)
:创建一个QLCDNumber
实例,用于显示倒计时。self.show_lcd.setDigitCount(8)
:设置 LCD 显示的数字位数为 8。self.show_lcd.display(self.star_time)
:在 LCD 显示器上显示初始时间。self.show_lcd.setGeometry(100, 30, 200, 30)
:设置 LCD 显示器的位置和大小。创建按钮:
self.btn = QPushButton('开始倒计时', self)
:创建一个按钮,初始文本为“开始倒计时”。self.btn.setGeometry(120, 80, 160, 30)
:设置按钮的位置和大小。self.btn.clicked.connect(self.star_timeeee)
:将按钮的点击事件连接到star_timeeee
方法,以便在按钮被点击时执行该方法。
self.timer = QTimer(self) # 创建 QTimer 实例 self.timer.setInterval(1000) # 设置定时器每 1000 毫秒(1 秒)触发一次 self.timer.timeout.connect(self.upate_time) # 连接定时器超时事件到更新时间的方法
创建定时器:
self.timer = QTimer(self)
:创建一个QTimer
实例,父部件为当前窗口。self.timer.setInterval(1000)
:设置定时器的时间间隔为 1000 毫秒(1 秒)。self.timer.timeout.connect(self.upate_time)
:将定时器的超时信号连接到upate_time
方法,以便当计时器到期时该方法被调用。
def star_timeeee(self): if self.btn.text() == '开始倒计时': self.timer.start() # 启动定时器 self.btn.setText('暂停') # 将按钮文本改为 "暂停" elif self.btn.text() == '暂停': self.timer.stop() # 停止定时器 self.btn.setText('开始倒计时') # 将按钮文本改为 "开始倒计时"
按钮处理方法:
def star_timeeee(self):
:定义按钮点击后的处理方法。if self.btn.text() == '开始倒计时':
:检查按钮当前文本,如果是“开始倒计时”则启动定时器。self.timer.start()
:启动定时器。self.btn.setText('暂停')
:将按钮文本更改为“暂停”。elif self.btn.text() == '暂停':
:如果按钮文本是“暂停”,则停止定时器。self.timer.stop()
:停止定时器。self.btn.setText('开始倒计时')
:将按钮文本更改为“开始倒计时”。
def upate_time(self): self.count -= 1 # 倒计时减一秒 if self.count < 0: # 如果倒计时小于 0 QMessageBox.warning(self, "倒计时", '比赛结束') # 弹出警告框提示比赛结束 self.timer.stop() # 停止定时器 self.btn.setText('开始倒计时') # 将按钮文本改为 "开始倒计时" else: # 更新显示的时间 self.current_time = self.time.addSecs(self.count).toString("hh:mm:ss") # 计算当前剩余时间 self.show_lcd.display(self.current_time) # 更新 LCD 显示
更新时间的方法:
def upate_time(self):
:定义更新时间的方法。self.count -= 1
:每次调用该方法时将倒计时减一秒。if self.count < 0:
:检查倒计时是否小于 0。
QMessageBox.warning(self, "倒计时", '比赛结束')
:如果倒计时结束,弹出警告框提示“比赛结束”。self.timer.stop()
:停止定时器。self.btn.setText('开始倒计时')
:将按钮文本更改为“开始倒计时”。else:
:如果倒计时仍大于或等于 0。
self.current_time = self.time.addSecs(self.count).toString("hh:mm:ss")
:计算当前剩余的时间并格式化为字符串。self.show_lcd.display(self.current_time)
:在 LCD 显示器上更新显示的时间。
# 导入必要的模块
from PyQt5.QtGui import QFont # 导入 QFont 用于设置字体
from PyQt5.QtWidgets import QLabel, QWidget, QApplication, QPushButton, QLCDNumber, QMessageBox # 导入窗口部件
import sys # 导入 sys 模块以处理命令行参数
from PyQt5.QtCore import QTimer, QDateTime, QTime # 导入时间和定时器相关的类 # 创建主窗口类,继承 QWidget
class windows(QWidget): def __init__(self): super().__init__() # 调用父类的构造函数 self.ui_init() # 初始化用户界面 def ui_init(self): # 初始化计时器的倒计时秒数 self.count = 5 # 倒计时初始值为 5 秒 # 创建 QTime 对象,初始为 00:00:00 self.time = QTime(0, 0, 0) # 计算倒计时结束时的时间字符串 self.star_time = self.time.addSecs(self.count).toString("hh:mm:ss") # 创建 QLCDNumber 用于显示倒计时 self.show_lcd = QLCDNumber(self) self.show_lcd.setDigitCount(8) # 设置显示的数字位数 self.show_lcd.display(self.star_time) # 显示初始时间 self.show_lcd.setGeometry(100, 30, 200, 30) # 设置显示区域的位置和大小 # 创建开始/暂停按钮 self.btn = QPushButton('开始倒计时', self) self.btn.setGeometry(120, 80, 160, 30) # 设置按钮的位置和大小 self.btn.clicked.connect(self.star_timeeee) # 连接按钮点击事件到处理方法 # 创建 QTimer 实例 self.timer = QTimer(self) self.timer.setInterval(1000) # 设置定时器每 1000 毫秒(1 秒)触发一次 self.timer.timeout.connect(self.upate_time) # 连接定时器超时事件到更新时间的方法 def star_timeeee(self): # 开始或暂停倒计时的处理方法 if self.btn.text() == '开始倒计时': # 如果按钮文本为 "开始倒计时" self.timer.start() # 启动定时器 self.btn.setText('暂停') # 将按钮文本改为 "暂停" elif self.btn.text() == '暂停': # 如果按钮文本为 "暂停" self.timer.stop() # 停止定时器 self.btn.setText('开始倒计时') # 将按钮文本改为 "开始倒计时" def upate_time(self): # 更新时间的方法 self.count -= 1 # 倒计时减一秒 if self.count < 0: # 如果倒计时小于 0 QMessageBox.warning(self, "倒计时", '比赛结束') # 弹出警告框提示比赛结束 self.timer.stop() # 停止定时器 self.btn.setText('开始倒计时') # 将按钮文本改为 "开始倒计时" else: # 更新显示的时间 self.current_time = self.time.addSecs(self.count).toString("hh:mm:ss") # 计算当前剩余时间 self.show_lcd.display(self.current_time) # 更新 LCD 显示 # 程序入口
if __name__ == '__main__': app = QApplication(sys.argv) # 创建 QApplication 实例,传入命令行参数 windows = windows() # 创建主窗口实例 windows.show() # 显示窗口 # app.exec() # 这行代码被注释掉了,因为下面的 sys.exit(app.exec_()) 会执行事件循环 sys.exit(app.exec_()) # 启动应用程序的事件循环,直到窗口关闭
三、进度条
进度条QProgressBar使用时需要那些值: 取值的范围、值的修改、当前值的获取
按钮QPushButton,对话框QMessageBox,进度条QProgressBar
def slot_init(self): self.btn.clicked.connect(self.star_timer) self.timer=QTimer(self) self.timer.setInterval(1000) self.timer.timeout.connect(self.update_value)
初始化信号和槽
slot_init
方法:
self.btn.clicked.connect(self.star_timer)
: 将按钮的clicked
信号连接到self.star_timer
槽函数。 当按钮被点击时,star_timer
方法会被调用。self.timer=QTimer(self)
: 创建一个QTimer
实例,并将其父控件设置为self
。self.timer.setInterval(1000)
: 设置定时器的时间间隔为 1000 毫秒 (1 秒)。self.timer.timeout.connect(self.update_value)
: 将定时器的timeout
信号连接到self.update_value
槽函数。 当定时器超时(每隔 1 秒),update_value
方法会被调用。
def star_timer(self): if self.btn.text() == '开始下载': self.timer.start() self.btn.setText('暂停下载') print('开始下载,定时器开始') else: self.timer.stop() self.btn.setText('开始下载') print('定时器关闭,暂停下载')
star_timer
方法:
if self.btn.text() == '开始下载'
: 检查按钮的文本是否为 "开始下载"。
- 如果是,则调用
self.timer.start()
启动定时器。- 将按钮的文本更改为 "暂停下载"。
- 打印 "开始下载,定时器开始" 到控制台。
else
: 如果按钮的文本不是 "开始下载"(即为 "暂停下载")。
- 调用
self.timer.stop()
停止定时器。- 将按钮的文本更改回 "开始下载"。
- 打印 "定时器关闭,暂停下载" 到控制台。
def update_value(self): self.random_num=random.randint(0,10) print(f'随机生成的值{self.random_num}') self.cur_num=self.progress_bar.value() print(f'当前的值{self.cur_num}') self.update_num=self.random_num+self.cur_num print(f'更新的值{self.update_num}') if self.update_num+self.random_num>=100: self.progress_bar.setValue(100) self.timer.stop() QMessageBox.information(self,'资源下载','下载完成') else: self.progress_bar.setValue(self.update_num)
update_value
方法:
self.random_num=random.randint(0,10)
: 生成一个 0 到 10 之间的随机整数,模拟每次更新的进度量。self.cur_num=self.progress_bar.value()
: 获取当前进度条的值。self.update_num=self.random_num+self.cur_num
: 计算新的进度值。if self.update_num+self.random_num>=100
: 检查更新后的值是否大于等于 100。
- 如果是,则将进度条的值设置为 100。
- 停止定时器。
- 使用
QMessageBox.information
显示一个消息框,提示 "下载完成"。else
: 如果更新后的值小于 100。
- 将进度条的值设置为
self.update_num
。
import random # 导入随机数模块,用于模拟下载进度的随机性 from PyQt5.QtCore import QTimer # 导入定时器类
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QProgressBar # 导入PyQt5的GUI组件
import sys # 导入系统模块,用于退出程序 class MyQwidget(QWidget): # 创建一个自定义的窗口类,继承自QWidget def __init__(self): super().__init__() # 调用父类的构造函数 self.ui_init() # 初始化用户界面 self.slot_init() # 初始化信号和槽函数 def ui_init(self): self.setWindowTitle('进度条') # 设置窗口标题 self.setGeometry(600, 300, 1200, 600) # 设置窗口的位置和大小 self.progress_bar = QProgressBar(self) # 创建一个进度条控件,父控件为当前窗口 self.progress_bar.setGeometry(100, 200, 1000, 100) # 设置进度条的位置和大小 self.progress_bar.setRange(0, 100) # 设置进度条的范围,最小值为0,最大值为100 self.progress_bar.setValue(0) # 设置进度条的初始值为0 self.btn = QPushButton('开始下载', self) # 创建一个按钮控件,文本为“开始下载”,父控件为当前窗口 self.btn.setGeometry(475, 400, 150, 100) # 设置按钮的位置和大小 def slot_init(self): self.btn.clicked.connect(self.star_timer) # 将按钮的点击信号连接到star_timer槽函数 self.timer = QTimer(self) # 创建一个定时器对象,父对象为当前窗口 self.timer.setInterval(1000) # 设置定时器的时间间隔为1000毫秒(1秒) self.timer.timeout.connect(self.update_value) # 将定时器的超时信号连接到update_value槽函数 def star_timer(self): if self.btn.text() == '开始下载': # 如果按钮的文本是“开始下载” self.timer.start() # 启动定时器 self.btn.setText('暂停下载') # 将按钮的文本设置为“暂停下载” print('开始下载,定时器开始') # 在控制台输出信息 else: # 如果按钮的文本不是“开始下载” self.timer.stop() # 停止定时器 self.btn.setText('开始下载') # 将按钮的文本设置为“开始下载” print('定时器关闭,暂停下载') # 在控制台输出信息 def update_value(self): self.random_num = random.randint(0, 10) # 生成一个0到10之间的随机整数 print(f'随机生成的值{self.random_num}') # 在控制台输出随机生成的值 self.cur_num = self.progress_bar.value() # 获取当前进度条的值 print(f'当前的值{self.cur_num}') # 在控制台输出当前进度条的值 self.update_num = self.random_num + self.cur_num # 计算更新后的进度值 print(f'更新的值{self.update_num}') # 在控制台输出更新后的进度值 if self.update_num + self.random_num >= 100: # 如果更新后的进度值大于等于100 self.progress_bar.setValue(100) # 将进度条的值设置为100 self.timer.stop() # 停止定时器 QMessageBox.information(self, '资源下载', '下载完成') # 显示一个消息框,提示下载完成 else: # 如果更新后的进度值小于100 self.progress_bar.setValue(self.update_num) # 将进度条的值设置为更新后的进度值 if __name__ == '__main__': app = QApplication(sys.argv) # 创建一个QApplication对象 w = MyQwidget() # 创建一个MyQwidget对象,即主窗口 w.show() # 显示主窗口 sys.exit(app.exec_()) # 启动应用程序的事件循环
根据进度条显示图片
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QMessageBox,QProgressBar, QLabel, QVBoxLayout)class ImageProgressBar(QWidget):"""一个带有进度条和图片显示的窗口。"""def __init__(self):super().__init__()self.image_paths = [f'{i}.png' for i in range(9)] # 图片路径列表self.current_image_index = 0 # 当前显示的图片索引self.setWindowTitle('根据进度条显示图片')self.setGeometry(600, 300, 400, 400)self.init_ui()self.init_slots()self.timer.start(1000) # 启动定时器, 避免一开始不点击按钮, 图片不出现def init_ui(self):"""初始化用户界面。"""# 创建控件self.progress_bar = QProgressBar(self)self.progress_bar.setRange(0, 100)self.progress_bar.setValue(0)self.btn = QPushButton('开始加载', self)self.label = QLabel(self)self.label.setFixedSize(200, 200) # 固定大小,避免图片缩放问题self.label.setScaledContents(True) # 自适应label大小# 布局管理layout = QVBoxLayout(self) # 垂直布局layout.addWidget(self.label)layout.addWidget(self.progress_bar)layout.addWidget(self.btn)self.setLayout(layout)self.update_image() # 初始化图片def init_slots(self):"""初始化信号和槽。"""self.btn.clicked.connect(self.toggle_timer)self.timer = QTimer(self)self.timer.timeout.connect(self.update_value)def toggle_timer(self):"""切换定时器状态(开始/停止)。"""if self.timer.isActive():self.timer.stop()self.btn.setText('开始加载')print('定时器关闭,暂停加载')else:self.timer.start()self.btn.setText('暂停加载')print('开始加载,定时器开始')def update_value(self):"""更新进度条和图片。"""current_value = self.progress_bar.value()new_value = min(current_value + 12, 100) # 确保不超过100self.progress_bar.setValue(new_value)self.update_image() # 更新图片print(f'更新的值{new_value}')if new_value == 100:self.timer.stop()QMessageBox.information(self, '资源加载', '加载完成')def update_image(self):"""根据进度条的值更新显示的图片。"""progress = self.progress_bar.value()index = min(progress // 12, 8) # 计算图片索引if index != self.current_image_index:self.current_image_index = indeximage_path = self.image_paths[index]self.label.setPixmap(QPixmap(image_path))if __name__ == '__main__':app = QApplication(sys.argv)window = ImageProgressBar()window.show()sys.exit(app.exec_())