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
提交
取消