在PyQt4中处理主循环之外的东西

时间:2013-10-12 19:00:01

标签: python qt loops pyqt4

我们正在构建基于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_code = kp.getKey()。但是我需要key_code = kp.getKey()在循环中的某个地方执行以处理键盘,还需要做其他后台工作。

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

所以问题是 - 如何处理我需要与PyQt4主循环一起完成的额外工作?

1 个答案:

答案 0 :(得分:0)

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