PyQT:我如何处理main中的循环?

时间:2010-09-22 00:07:20

标签: pyqt

我有一个具有PyQT GUI的应用程序。我以通常的PyQT方式设置GUI:

app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.initialize()
win.show()
sys.exit(app.exec_())

问题是,在此之后,我有一个处理信号的while循环(signal.signal(signal.SIGINT,...),还做了一些其他事情。如果我调用sys.exit(app.exec_() )在while循环之前,循环不执行。如果我在循环之后调用它,GUI就会挂起。非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:3)

app.exec_()调用基本上是'一个处理[QT]信号'的while循环等。这是程序的事件循环。

你不应该需要自己的循环去做那些事情。如果你这样做,那你就是在谈论多个线程,你需要查看QThread和/或QEventLoop的文档。

真的不应该需要一个while循环来处理像SIGINT等系统信号 - 这些是专门设计的,你可以像事件一样“挂钩”它们,它们的出现会触发一个函数你指定。

答案 1 :(得分:1)

pyqt4的常规方法(对于wx,gtk等实际上是类似的)是将选择的小部件子类化,这可能是你的MainWindow(来自QMainWindow?),并用各种信号填充它和qt的事件循环生成的插槽,这样你就不必担心它们了。

您可能希望包含MainWindow的定义,以便我们更好地了解您感兴趣的事件的上下文和种类。

更具体的问题是,如果您想截取主窗口的关闭,可以在MainWindow中重新实现以下方法,如下所示:

    def closeEvent(self,event):
        event.ignore()

会阻止您的主窗口关闭。