我有一个PyQt向导,其中包含一个向用户询问问题的对话框。此对话框是可选的,仅在用户需要时使用。按钮发送应用程序接收的信号并打开窗口。我遇到的问题是,当对话框关闭时,它会关闭整个应用程序。如何确保在关闭对话框时,主应用程序保持打开和运行状态?这里是处理对话框的代码:
def new_item(self):
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.exec_()
我尝试添加“取消”按钮以手动关闭它,但结果相同,整个应用程序关闭。
QtCore.QObject.connect(self.cancel, QtCore.SIGNAL(_fromUtf8("clicked()")), Dialog.close)
答案 0 :(得分:0)
您的代码应如下所示:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4 import QtGui, QtCore
class MyWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.dialog = QtGui.QMessageBox(self)
self.dialog.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)
self.dialog.setIcon(QtGui.QMessageBox.Question)
self.dialog.setText("Click on a button to continue.")
self.pushButtonQuestion = QtGui.QPushButton(self)
self.pushButtonQuestion.setText("Open a Dialog!")
self.pushButtonQuestion.clicked.connect(self.on_pushButtonQuestion_clicked)
self.layoutHorizontal = QtGui.QHBoxLayout(self)
self.layoutHorizontal.addWidget(self.pushButtonQuestion)
@QtCore.pyqtSlot()
def on_pushButtonQuestion_clicked(self):
result = self.dialog.exec_()
if result == QtGui.QMessageBox.Ok:
print "Dialog was accepted."
elif result == QtGui.QMessageBox.Cancel:
print "Dialog was rejected."
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.show()
sys.exit(app.exec_())
答案 1 :(得分:0)
您不应该在代码中创建新的QApplication
对象,并且我不会惊讶于销毁该对象会关闭应用程序。
答案 2 :(得分:0)
尝试使用Dialog.reject
代替Dialog.close
.close()
方法与QMainWindow小部件一起使用,.reject()
与QDialog一起使用。
答案 3 :(得分:0)
就我而言,我使用 QSystemTrayIcon
作为应用的“入口点”,而不是 QMainWindow
或 QWidget
。
在我的主 .setQuitOnLastWindowClosed(False)
实例上调用 QApplication
有所帮助,感谢 this answer