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()
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top