为了账号安全,请及时绑定邮箱和手机立即绑定

Pyqt GUI没有响应

Pyqt GUI没有响应

繁星coding 2021-03-30 09:10:35
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()


查看完整回答
反对 回复 2021-04-13
  • 1 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信