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.pswp.cn/news/895286.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895286.shtml
英文地址,請注明出處:http://en.pswp.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;憑借其易用性和高效性…

為AI聊天工具添加一個知識系統 之97 詳細設計之38 Token 之3 前端開發

本文要點 要點 本項目&#xff08;為使用各種聊天工具的聊天者 加掛一個知識系統&#xff09;前端 的用戶界面上 主要 有 知識圖譜、認知地圖和語義網絡&#xff0c;和 聊天工具的chat嵌入 同時還必須有知識樹 成熟的果實&#xff08;對外的網頁 ) 以及 組建和參與利益相關組…

輪子項目--消息隊列的實現(3)

上一篇文章中我把一些關鍵的類以及表示出來&#xff0c;如何對這些類對應的對象進行管理呢&#xff1f;管理分為硬盤和內存上&#xff0c;硬盤又分為數據庫&#xff08;管理交換機&#xff0c;隊列和綁定&#xff09;和文件&#xff08;管理消息&#xff09;&#xff0c;本文就…

Svelte前端框架

Svelte 簡介 Svelte 是一個現代的前端框架&#xff0c;用于構建高效、響應式的用戶界面。與 React、Vue 和 Angular 等傳統框架不同&#xff0c;Svelte 在構建時將組件編譯為高效的純 JavaScript 代碼&#xff0c;而不是在瀏覽器中運行一個龐大的運行時庫。這使得 Svelte 應用具…

【轉載】開源鴻蒙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。…

@SneakyThrows:是Java異常處理的“魔法外掛“,還是隱藏的“定時炸彈“?

引言&#xff1a;當Java的異常機制成為"甜蜜的負擔" Java的檢查型異常&#xff08;Checked Exception&#xff09;設計本意是提升代碼健壯性&#xff0c;但開發者常常陷入兩難&#xff1a; 要么用try-catch層層包裹代碼導致"金字塔噩夢"&#xff0c;要么在…

雙周報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 { .…

Git 與持續集成 / 持續部署(CI/CD)的集成

一、引言 在當今快速發展的軟件開發領域&#xff0c;高效的代碼管理和持續的交付流程是項目成功的關鍵因素。Git 作為一款分布式版本控制系統&#xff0c;已經成為了開發者們管理代碼的標配工具&#xff1b;而持續集成 / 持續部署&#xff08;CI/CD&#xff09;則是一種能夠加…

百問網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.…

開發中用到的設計模式

目錄 開發中用到的設計模式 工廠模式 設計理念 好處 體現的編程思想 適配器模式 概念 策略模式和適配器模式的區別 選擇策略模式而非適配器模式的原因 設計模式的開發原則 開發中用到的設計模式 在開發過程中&#xff0c;常見的設計模式會根據不同的業務場景和需求被…

1064 - You have an error in your SQL syntax;

在創建數據庫表建立外鍵是遇到了如下報錯 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near position(position_id) ) at line 8 數據庫表sql如下&#xff1a; --職位表 CR…

無人機 ,遙控器與接收機之前的通信

目錄 1、信號類型 2、工作頻率 3、通信協議 3.1、PPM 協議 3.2、SBUS 協議 3.3、CRSF 協議 無人機的遙控器和接收機之間常用的信號、頻率、協議等相關信息如下&#xff1a; 1、信號類型 模擬信號 特點&#xff1a;信號的幅度、頻率或相位等參數是連續變化的&#xff0c…

【c++】四種類型轉換形式

【c】四種類型轉換形式 編譯時: static_cast&#xff08;靜態轉換&#xff09; const_cast&#xff08;去常性轉換&#xff09; reinterpret_cast&#xff08;重新解釋轉換&#xff0c;直接轉換地址&#xff09; 運行時: dynamic_cast&#xff08;動態轉換&#xff0c;運行時類…

Cisco ASR1002查看資源占用的幾條命令

查看平臺資源 show platform resource 該命令用于顯示整個平臺的資源使用情況&#xff0c;包括 CPU、內存等 example: ASR1002# show platform resources **State Acronym: H - Healthy, W - Warning, C - Critical Resource…

Day 1:認知革命與DeepSeek生態定位

目標&#xff1a;建立對大模型技術范式的系統性認知&#xff0c;掌握DeepSeek的核心技術特性與生態價值 一、大模型技術演進&#xff1a;從GPT到DeepSeek 1.1 技術發展里程碑 2017-Transformer突破&#xff1a;Self-Attention機制如何突破RNN的序列建模瓶頸 2018-GPT初代&…