如何在Pyside中创建非阻塞QMessageBox?

2024-05-29 07:09:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用非阻塞的qmessage创建一个简单的qmessage。不幸的是,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...

你知道我做错什么了吗?我还需要其他什么东西来确保窗口不阻塞并正确显示吗?如有任何帮助,将不胜感激


Tags: to代码importcloseaswidget例子pyside
2条回答

您必须在一个单独的线程中执行计算开销较大的任务,并让事件循环在主线程中运行。或者在偶尔执行QCoreApplication.processEvents()时做一些昂贵的事情。在

您的主要问题是尚未定义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_())

我做了一些改变。第一个:

^{pr2}$

这删除了import PySide,而只是导入了QtCore。这不是一个巨大的变化,但遵循了QtGui的导入。在

import sys

app = qg.QApplication(sys.argv)
...
sys.exit(app.exec_())

这些是很重要的。这将设置一个^{}。在

PySide.QtGui.QApplication contains the main event loop, where all events from the window system and other sources are processed and dispatched. It also handles the application’s initialization, finalization, and provides session management. In addition, PySide.QtGui.QApplication handles most of the system-wide and application-wide settings.


上面的代码将生成此窗口:

Example window

相关问题 更多 >

    热门问题