Диалоговое окно PyQt закрывает все приложение при выходе

Вопрос: У меня есть мастер PyQt, который включает диалоговое окно, которое задает пользователю вопрос. Это диалоговое окно является необязательным и используется только в том случае, если пользователь этого захочет. Кнопка посылает сигнал, который приложение получает и открывает окно. Проблема в том, что когда диалог закрыт, он закрывает все приложение вместе с ним. Как я могу

Вопрос:

У меня есть мастер 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) Ответ №1

Ваш код должен выглядеть примерно так:

#!/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_()) Ответ №2

Вы не должны создавать новые объекты QApplication в своем коде, и я не удивлен, что уничтожение этого объекта закрывает приложение.

Ответ №3

Попробуйте использовать Dialog.reject вместо Dialog.close

.close() используется с виджетом QMainWindow, .reject() с QDialog.

Оцените статью
Добавить комментарий