一、圖像顯示
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_())
?