Pregunta

He crear un widget QDialog. Mi problema es que no puedo salir de la QDialog. Si presiono uno de los botones, entonces el QDialog sólo se establece a "ocultar". Aquí es una pequeña parte del código. Es ejecutable. No sé lo que estoy haciendo mal. Tal vez uno de ustedes me puede decir.

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()
¿Fue útil?

Solución

No sé pitón en absoluto, sino que parece que el diálogo es la única ventana para su aplicación. Es posible que desee para tratar de invocar el diálogo con form.show_() en lugar de form.exec_(). Este último se utiliza normalmente para visualizar el cuadro de diálogo de forma modal sobre una ventana padre.

Otros consejos

Para terminar un diálogo, aceptar debería funcionar (al menos si usted ha hecho su diálogo modal, que creo que exec_ siempre lo hace).

La alternativa normal es rechazan ; o, en lugar de uno o ambos, se podría llamar hecho con un parámetro int (que se convierte en el resultado de exec_).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top