我正在测试使用PyQt构建的gui,我希望能够使用在PyQt事件循环开始后执行的python代码与gui进行交互(app.exec_())
。另一种说法是我想要的对app.exec_
的调用立即返回,好像gui是无模式的,然后是与gui交互的更多python代码。
我发现this在一个线程中运行PyQt循环的例子,但不想做一些非常规的事情。有没有办法让PyQt消息循环继续处理消息,同时在调用exec_
后在主线程中执行python代码?
答案 0 :(得分:0)
我明白了。我可以使用exec从主线程逐行执行测试脚本,然后从工作线程运行gui。
答案 1 :(得分:0)
不完全确定你想做什么。你在为PyQt寻找像Py(known as PyCrust)这样的东西吗?
答案 2 :(得分:0)
这里的一个选项是在调用`exec _()'之后使用QtCore.QTimer.singleShot()
调用来启动你的python代码。
例如:
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
# Setup the GUI.
gui = MyGui()
gui.showMainWindow()
# Post a call to your python code.
QtCore.QTimer.singleShot(1000, somePythonFunction)
sys.exit(app.exec_())
这将在1秒后执行函数somePythonFunction()
。您可以将时间设置为零,以便立即将添加的功能排队等待执行。
答案 3 :(得分:0)
答案 4 :(得分:0)
作为一个可能的简单答案,请尝试不要在脚本中调用app.exec_()
,而不要使用python -i My_PyQt_app.py
运行PyQt程序。
例如:
## My_PyQt_app.py
import sys
from PyQt5.QtWidgets import QApplication, QWidget
app = QApplication(sys.argv)
window = QWidget()
window.show()
# Don't start the event loop as you would do normally!
# app.exec_()
这样做可以让您通过终端运行GUI并在命令行中与之交互。