PyQt: Wie kann ich einen QDialog beenden?
Frage
Ich habe einen QDialog Widget bauen. Mein Problem ist, ich nicht die QDialog beenden kann. Wenn ich auf eine der Tasten drücken, dann wird die QDialog nur zu „verstecken“ gesetzt. Hier ist ein kleiner Teil des Codes. Es ist ausführbar. Ich weiß nicht, was ich falsch mache. Vielleicht einer von euch kann mir sagen.
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()
Lösung
Ich weiß nicht, Python überhaupt, aber es sieht aus wie der Dialog das einzige Fenster für Ihre Anwendung ist. Sie können anstelle von form.show_()
mit form.exec_()
versuchen wollen den Dialog aufruft. Letztere wird in der Regel verwendet, um den Dialog anzuzeigen modal über einen übergeordneten Fenster.
Andere Tipps
Um einen Dialog zu beenden, akzeptieren sollte (zumindest, wenn Sie Ihren Dialog modal gemacht habe, die ich exec_
immer tut glauben) arbeiten.
Die normale Alternative ist ablehnen ; oder anstelle von einem oder beiden, könnten Sie rufen getan mit einem int
Parameter (die exec_
Ergebnis wird).