PyQt: Come posso uscire da un QDialog?
Domanda
Ho costruire un QDialog Widget. Il mio problema è che non riesco a uscire dal QDialog. Se premo uno dei tasti, quindi il QDialog è impostato solo per "nascondere". Ecco un po 'di parte del codice. E 'eseguibile. Non so quello che sto facendo male. Forse uno di voi mi può 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()
Soluzione
Non so python a tutti, ma sembra che il dialogo è l'unica finestra per la vostra applicazione. Si consiglia di provare a lanciare il dialogo con form.show_()
invece di form.exec_()
. Quest'ultimo è normalmente utilizzato per visualizzare la finestra di dialogo modale su una finestra genitore.
Altri suggerimenti
Per terminare una finestra di dialogo, accettare dovrebbe funzionare (almeno se hai fatto la tua finestra di dialogo modale, che credo exec_
fa sempre).
L'alternativa è normale scarto ; o, al posto di uno o di entrambi, si potrebbe chiamare fatto con un parametro int
(che diventa il risultato di exec_
).