繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM