Python 在PyQt4中处理主循环之外的事情

Python 在PyQt4中处理主循环之外的事情,python,qt,loops,pyqt4,Python,Qt,Loops,Pyqt4,我们正在构建一个基于RaspberryPi的硬件,并使用PyQt4在一个3英寸的小屏幕上处理输出 除了屏幕外,我们还有一个简单的硬件键盘,需要在循环中进行处理,以检查按键是否按下并相应地执行操作 要简化事情,现在的代码如下所示: while True: gui_initialized = False current_screen = None if gui_initialized is False: app = QtGui.

我们正在构建一个基于RaspberryPi的硬件,并使用PyQt4在一个3英寸的小屏幕上处理输出

除了屏幕外,我们还有一个简单的硬件键盘,需要在循环中进行处理,以检查按键是否按下并相应地执行操作

要简化事情,现在的代码如下所示:

while True:
        gui_initialized = False
        current_screen = None
        if gui_initialized is False:
            app = QtGui.QApplication(sys.argv)
            main_win = gui.GUI()
            gui_initialized = True
            sys.exit(app.exec_())

        key_code = kp.getKey()
由于PyQt4主循环,此代码是错误的。一旦执行到达行
sys.exit(app.exec())
-它将永远停止在那里,永远不会到达
key\u code=kp.getKey()
。但我需要
key\u code=kp.getKey()
要在循环中的某个位置执行,以处理键盘,还需要执行其他后台工作

事实上,通常的Qt事件处理在我们的例子中并不适用,因为我们没有标准的输入工具,只有一个定制的键盘和NFC天线,两者都在主python程序中处理


因此,问题是-我如何处理与PyQt4主循环一起需要做的额外工作?

在Qt中进行轮询的惯用方法是将轮询代码放入插槽中,并将来自
QTimer
的超时信号以零超时连接到该插槽。

毕竟我已经摆脱了exec()在我的主循环中显式地调用并实现了Qt主循环所需的操作。实际上只有两个函数调用。不过,如果在事件循环的每一个循环上运行某个操作,那么零超时计时器正是为此目的而创建的。