PyQt: Comment puis-je quitter un QDialog?
Question
J'ai construire un Widget QDialog. Mon problème est, je ne peux pas quitter le QDialog. Si j'appuie sur un des boutons, le QDialog n'est réglé sur « cacher ». Voici une petite partie du code. Il est exécutable. Je ne sais pas ce que je fais mal. Peut-être que l'un d'entre vous peut me dire.
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
class MyClass(QDialog):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
# init
# ------------------------------------------------
self.setMinimumWidth(600)
self.setWindowTitle("Select Dingsda")
self.layout = QVBoxLayout()
self.setLayout(self.layout)
self.layoutWidget = QWidget(self)
self.liste = []
# widgets and layouts
# ------------------------------------------------
tempLayout = QHBoxLayout()
self.cancelButton = QPushButton("Cancel")
self.connect(self.cancelButton, SIGNAL('clicked()'), self.cancel)
self.addSelectedButton = QPushButton("Add Selected")
self.connect(self.addSelectedButton, SIGNAL('clicked()'), self.addSelected)
tempLayout.addStretch()
tempLayout.addWidget(self.cancelButton)
tempLayout.addWidget(self.addSelectedButton)
self.layout.addLayout(tempLayout)
# test-data
# ------------------------------------------------
# methods
# ------------------------------------------------
def cancel(self):
self.close()
def addSelected(self):
self.liste = ["1", "2", "3", "4", "5"]
self.accept()
def exec_(self):
if QDialog.exec_(self) == QDialog.Accepted:
return self.liste
else:
return []
def test():
app = QApplication([""])
form = MyClass()
i = form.exec_()
print i
sys.exit(app.exec_())
#-------------------------------------------------------------------------------
# main
#-------------------------------------------------------------------------------
if __name__ == "__main__":
test()
La solution
Je ne sais pas du tout python, mais il semble que le dialogue est la seule fenêtre pour votre application. Vous pouvez essayer d'invoquer le dialogue avec form.show_()
au lieu de form.exec_()
. Ce dernier est normalement utilisé pour afficher la boîte de dialogue de façon modale sur une fenêtre parent.
Autres conseils
Pour terminer une boîte de dialogue, accepter devrait fonctionner (au moins si vous avez fait votre boîte de dialogue modale, que je crois exec_
fait toujours).
L'alternative normale est rejet ; ou, au lieu de l'une ou les deux, vous pouvez appeler fait avec un paramètre int
(qui devient le résultat de exec_
).