繁体   English   中英

Pyqt GUI 没有响应

[英]Pyqt GUI not responding

pyqt gui没有响应

我正在尝试为我的linkedin 刮板程序制作一个 gui。 但是一旦主程序开始执行,GUI 就会没有响应。 在调用 main 函数之前它工作正常。 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 链接,我该怎么做? main 函数很长,一个 ang 有很多子函数。 所以我想将它链接到每个子功能

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM