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()
War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top