Python----PyQt开发(PyQt高级:图像显示,定时器,进度条)

一、图像显示

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业路由器物联网应用,智慧环保环境数据监测

在智慧环保环境数据监测中工业路由器能连接各类分散的传感器&#xff0c;实现多源环境数据集中采集&#xff0c;并通过多种通信网络稳定传输至数据中心或云平台。 工作人员借助工业路由器可远程监控设备状态与环境数据&#xff0c;还能远程配置传感器参数。远程控制设置数据阈…

【DeepSeek】在本地计算机上部署DeepSeek-R1大模型实战(完整版)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…

JAVA并发编程3--多线程程序

​ 1.创建线程的方法&#xff1a; 案例&#xff1a;计算1-1000的整数和 实现Runnable接口 步骤&#xff1a; 1.创建一个实现了Runnable接口的类 2.实现类去实现Runnable中的抽象方法&#xff1a;run() 3.创建实现类的对象 4.将此对象作为参数传递到Thread类的构造器中&#…

django中间件,中间件给下面传值

1、新建middleware.py文件 # myapp/middleware.py import time from django.http import HttpRequest import json from django.http import JsonResponse import urllib.parse class RequestTimeMiddleware:def __init__(self, get_response):self.get_response get_respons…

Vision Transformer:打破CNN垄断,全局注意力机制重塑计算机视觉范式

目录 引言 一、ViT模型的起源和历史 二、什么是ViT&#xff1f; 图像处理流程 图像切分 展平与线性映射 位置编码 Transformer编码器 分类头&#xff08;Classification Head&#xff09; 自注意力机制 注意力图 三、Coovally AI模型训练与应用平台 四、ViT与图像…

深入浅出:探索 DeepSeek 的强大功能与应用

深入浅出&#xff1a;探索 DeepSeek 的强大功能与应用 在人工智能技术飞速发展的今天&#xff0c;自然语言处理&#xff08;NLP&#xff09;作为其重要分支&#xff0c;正逐渐渗透到我们生活的方方面面。DeepSeek 作为一款功能强大的 NLP 工具&#xff0c;凭借其易用性和高效性…

轮子项目--消息队列的实现(3)

上一篇文章中我把一些关键的类以及表示出来&#xff0c;如何对这些类对应的对象进行管理呢&#xff1f;管理分为硬盘和内存上&#xff0c;硬盘又分为数据库&#xff08;管理交换机&#xff0c;队列和绑定&#xff09;和文件&#xff08;管理消息&#xff09;&#xff0c;本文就…

【转载】开源鸿蒙OpenHarmony社区运营报告(2025年1月)

●截至2025年1月31日&#xff0c;开放原子开源鸿蒙&#xff08;OpenAtom OpenHarmony&#xff0c;简称“开源鸿蒙”或“OpenHarmony”&#xff09;社区累计超过8200名贡献者&#xff0c;共63家成员单位&#xff0c;产生51.2万多个PR、2.9万多个Star、10.5万多个Fork、68个SIG。…

双周报Vol.65:新增is表达式、字符串构造和数组模式匹配增强、IDE模式匹配补全增强...多项技术更新!

MoonBit更新 新增 is 表达式 这个表达式的语法形式为 expr is pat&#xff0c;这个表达式为 Bool 类型&#xff0c;当 expr 符合 pat 这个模式的时候返回 true&#xff0c;比如&#xff1a; fn use_is_expr(x: Int?) -> Unit {if x is Some(i) && i > 10 { .…

百问网imx6ullpro调试记录(linux+qt)

调试记录 文章目录 调试记录进展1.开发板相关1.1百问网乌班图密码 1.2 换设备开发环境搭建串口调试网络互通nfs文件系统挂载 1.3网络问题1.4系统启动1.5进程操作 2.QT2.1tslib1.获取源码2.安装依赖文件3.编译 2.2qt移植1.获取qt源码2.配置编译器3.编译 2.3拷贝到开发板1.拷贝2.…

C++模拟实现AVL树

目录 1.文章概括 2.AVL树概念 3.AVL树的性质 4.AVL树的插入 5.旋转控制 1.左单旋 2. 右单旋 3.左右双旋 4.右左双旋 6.全部代码 1.文章概括 本文适合理解平衡二叉树的读者阅读&#xff0c;因为AVL树是平衡二叉树的一种优化&#xff0c;其大部分实现逻辑与平衡二叉树是…

opc da 服务器数据 转 EtherCAT项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 应用条件 4 查看OPC DA服务器的相关参数 5 配置网关采集opc da数据 6 启动EtherCAT从站转发采集的数据 7 在服务器上运行仰科OPC DA采集软件 8 案例总结 1 案例说明 在OPC DA服务器上运行OPC DA client软件查看OPC DA服务器的相…

实验9 基于WebGoat平台的SQL注入攻击

实验9 基于WebGoat平台的SQL注入攻击 1.实验目的 熟悉WebGoat平台&#xff0c;在该平台上实现SQL注入攻击。 2.实验内容 &#xff08;1&#xff09;下载webgoat-server-8.2.2.jar。 &#xff08;2&#xff09;搭建java环境。 &#xff08;3&#xff09;运行webgoat。 &#xf…

StochSync:可在任意空间中生成360°全景图和3D网格纹理

StochSync方法可以用于在任意空间中生成图像&#xff0c;尤其是360全景图和3D网格纹理。该方法利用了预训练的图像扩散模型&#xff0c;以实现零-shot生成&#xff0c;消除了对新数据收集和单独训练生成模型的需求。StochSync 结合了 Diffusion Synchronization&#xff08;DS&…

HarmonyOS 5.0应用开发——全局自定义弹出框openCustomDialog

【高心星出品】 文章目录 全局自定义弹出框openCustomDialog案例开发步骤完整代码 全局自定义弹出框openCustomDialog CustomDialog是自定义弹出框&#xff0c;可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹出框…

DeepSeek模型R1服务器繁忙,怎么解决?

在当今科技飞速发展的时代&#xff0c;人工智能领域不断涌现出令人瞩目的创新成果&#xff0c;其中DeepSeek模型无疑成为了众多关注焦点。它凭借着先进的技术和卓越的性能&#xff0c;在行业内掀起了一股热潮&#xff0c;吸引了无数目光。然而&#xff0c;如同许多前沿技术在发…

AIGC-微头条爆款文案创作智能体完整指令(DeepSeek,豆包,千问,Kimi,GPT)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资…

[LLM面试题] 指示微调(Prompt-tuning)与 Prefix-tuning区别

一、提示调整(Prompt Tuning) Prompt Tuning是一种通过改变输入提示语&#xff08;input prompt&#xff09;以获得更优模型效果的技术。举个例子&#xff0c;如果我们想将一条英语句子翻译成德语&#xff0c;可以采用多种不同的方式向模型提问&#xff0c;如下图所示&#xf…

自主项目面试点总结

1、许苑–OJ判题系统 技术栈&#xff1a;Spring BootSpring Cloud AlibabaRedisMybatisMQDocker 项目地址: https://github.com/xuyuan-upward/xyoj-backend-microservice 1.1、项目介绍: 一个基于微服务的OJ系统&#xff0c;具备能够根据管理员预设的题目用例对用户提交的代…

【py】python安装教程(Windows系统,python3.13.2版本为例)

1.下载地址 官网&#xff1a;https://www.python.org/ 官网下载地址&#xff1a;https://www.python.org/downloads/ 2.64版本或者32位选择 【Stable Releases】&#xff1a;稳定发布版本&#xff0c;指的是已经测试过的版本&#xff0c;相对稳定。 【Pre-releases】&#…