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()
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top