pyqt gui沒有響應我正在嘗試為我的Linkedin刮板程序做一個GUI。但是一旦主程序開始執行,GUI便不會響應。在調用主要函數之前它的工作正常。桂碼是 class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.setMinimumSize(QSize(720, 540)) self.setWindowTitle("LinkedIn Scraper") self.nameLabel = QLabel(self) self.nameLabel.setText('Keywords:') self.keyword = QLineEdit(self) self.keyword.move(130, 90) self.keyword.resize(500, 32) self.nameLabel.move(70, 90) self.nameLabel = QLabel(self) self.nameLabel.setText('Sector:') self.sector = QLineEdit(self) self.sector.move(130, 180) self.sector.resize(500, 32) self.nameLabel.move(70, 180) self.btn = QPushButton('Download', self) self.btn.clicked.connect(self.doAction) self.btn.resize(200, 32) self.btn.move(270, 360) self.pbar = QProgressBar(self) self.pbar.setGeometry(110, 450, 550, 25) def doAction(self): print('Keyword: ' + self.keyword.text()) print('Sector: ' + self.sector.text()) main(self.keyword.text(),self.sector.text())也想將該進度欄與main鏈接,我該怎么做?主要功能是一個很長的功能,具有許多子功能。所以我想將其鏈接到每個子功能
1 回答

拉風的咖菲貓
TA貢獻1995條經驗 獲得超2個贊
GUI應用程序是圍繞事件循環構建的:Qt坐在那里,接受來自用戶的事件,并調用您的處理程序。您的處理程序必須盡快返回,因為Qt在您返回之前無法接受下一個事件。
這就是GUI不響應的意思:事件只是排隊,因為您沒有讓Qt對它們做任何事情。
有幾種解決方法,但是,特別是對于Qt,慣用的方法是啟動后臺線程來完成工作。
您確實需要閱讀有關Qt中的線程的教程。從快速搜索,這一個看起來不錯的,盡管它是PyQt4的。但是您可能可以為PyQt5找到一個不錯的選擇。
簡短的版本是:
class MainBackgroundThread(QThread):
def __init__(self, keyword, sector):
QThread.__init__(self)
self.keyword, self.sector = keyword, sector
def run(self):
main(self.keyword, self.sector)
現在,您的doAction方法更改為:
def doAction(self):
self.worker = MainBackgroundThread(self.keyword.text(), self.sector.text())
self.worker.start()
添加回答
舉報
0/150
提交
取消