我使用 PyQt5 創建了一個包含進度條的 UI。我已經在 python 中撰寫了這個進度條,以便它實時增加到 99%。我面臨的問題是視窗在作業完成之前不會加載。我讀過類似的帖子,這些帖子談論執行緒,但我無法從中掌握任何東西。如果有人可以向我解釋一個解決方案,并且如果它確實需要執行緒,我將不勝感激,這是我尚未學習的一個方面,請用外行術語向我解釋。
import sys, os, sqlite3
import random, datetime
from PyQt5 import QtCore, QtGui, uic
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton,
QMessageBox, QProgressBar, QSplashScreen
import sqlite3
import time
window2 = uic.loadUiType("login_loadingbar.ui")[0]
class LoadingBar(QtWidgets.QMainWindow, window2):
def __init__(self, parent=None):
QtWidgets.QMainWindow.__init__(self, parent)
self.setupUi(self)
#title
self.setWindowTitle('Loading')
#makes progress bar go from 0-100, time scaled
def progress(self):
for i in range(100):
time.sleep(0.1)
self.login_progressBar.setValue(i)
app = QApplication(sys.argv)
w2 = LoadingBar(None)
w2.show()
w2.progress()
app.exec_()
uj5u.com熱心網友回復:
當你創建 gui 應用程式時,你有一個執行緒,在這個執行緒中有一個叫做事件回圈的東西——它本質上是處理事件的 while 回圈——在必要時重繪小部件,將鍵盤和滑鼠輸入分派給相關的小部件。
因為你只有一個執行緒,你一次只能做一件事,所以當你做長操作時time.sleep(),事件回圈被凍結 - 沒有小部件被重繪,沒有輸入處理,直到它完成并且到達事件回圈的下一次迭代。
您可以創建第二個執行緒并在那里移動操作,或者在簡單的情況下,當操作可以拆分為多個片段時 - 在片段之間的事件回圈中處理事件:
for i in range(100):
time.sleep(0.1)
self.login_progressBar.setValue(i)
QtWidgets.QApplication.processEvents()
這種方式事件回圈有點作業,但應用程式不是 100% 回應的,因為每個都會time.sleep(0.1)凍結它,所以滑鼠點擊和其他事件可能無法處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467461.html
