[英]How to create non-blocking QMessageBox in Pyside?
我正在尝试使用PySide创建一个简单的无阻塞QMessageBox。 不幸的是,qmessagebox没有出现。 我尝试了以下C语言的示例并改编了代码,但到目前为止没有任何效果。 这是我的代码:
import PySide.QtGui as qg
import PySide
widget = qg.QMessageBox()
widget.setText("Close Gazebo to continue...")
widget.setWindowModality(PySide.QtCore.Qt.NonModal)
widget.show()
#Do some computationally expensive stuff...
知道我在做什么错吗? 我还需要确保窗口没有阻塞并且正确显示吗? 任何帮助,将不胜感激
您的主要问题是尚未定义QApplication。
import PySide.QtGui as qg
import PySide.QtCore as qc
import sys
app = qg.QApplication(sys.argv)
widget = qg.QMessageBox()
widget.setText("Close Gazebo to continue...")
widget.setWindowModality(qc.Qt.NonModal)
widget.show()
sys.exit(app.exec_())
我做了一些更改。 第一:
import PySide.QtCore as qc
...
widget.setWindowModality(qc.Qt.NonModal)
这删除了import PySide
,而是导入了QtCore
。 这不是一个很大的变化,但是可以跟随您导入QtGui
。
import sys
app = qg.QApplication(sys.argv)
...
sys.exit(app.exec_())
这些是重要的路线。 这将设置一个QApplication
。
PySide.QtGui.QApplication包含主事件循环,在该循环中,来自窗口系统和其他来源的所有事件都将被处理和调度。 它还处理应用程序的初始化,完成并提供会话管理。 另外,PySide.QtGui.QApplication处理大多数系统范围和应用程序范围的设置。
上面的代码将产生以下窗口:
您必须在单独的线程中执行计算量大的工作,并让事件循环在主线程中运行。 或者偶尔执行QCoreApplication.processEvents()
时执行昂贵的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.