PyQt QDialog - retour d'une valeur et la fermeture de la boîte de dialogue

Je suis en train de travailler sur une interface utilisateur en PyQt, et je suis en cours d'exécution dans un certain nombre de problèmes en essayant d'utiliser QDialog. Essentiellement, j'ai un widget principal et un sous-widget, enregistré en séparer .py fichiers; j'aimerais que le sous-widget pour ouvrir lorsque je clique sur un bouton de certaines dans le widget principal. Cela semble être l'ouverture d'amende.

Le problème vient de revenir et de fermeture. J'ai un bouton "soumettre" sur mon sous-widget - lorsque l'utilisateur clique sur ce bouton, je voudrais retourner une valeur (un dictionnaire de leur entrée) pour le widget principal, et fermer le sous-widget. Je n'arrive pas à faire une de ces choses avec le code que j'ai droit.

Applicable morceaux de code dans le widget principal (pouvez ajouter plus de le rendre autonome si le problème n'est pas évident):

import SGROIWidget_ui

def retranslateUi(self, ROIGUI):
    #ShowGroupROI is a push-button
    self.ShowGroupROI.clicked.connect(self.ShowGroupROIFunction)

def ShowGroupROIFunction(self):
    dialog = QDialog()
    dialog.ui = SGROIWidget_ui.Ui_ShowGroupWidget()
    dialog.ui.setupUi(dialog)
    dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    if dialog.exec_():
        roiGroups=dialog.Submitclose()
        print(roiGroups)
        dialog.accept()

Je ne semblent jamais à frapper le code après le if.

Le code applicable à partir de mon sous-widget (comprendra un peu plus ici):

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_ShowGroupWidget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)

    def setupUi(self, ShowGroupWidget):
        #sets up Submit button

    def retranslateUi(self, ShowGroupWidget):
        self.Submit.clicked.connect(self.Submitclose)

     def Submitclose(self):
        roiGroups={}
        #roiGroups gets set up here as a dictionary
        #It prints nicely from here so I know it's not the issue

        return roiGroups 
        #I don't know if I can just do a return statement like this?
        self.close()*

*J'ai essayé ex.close() ici aussi, mais les anciens n'est pas reconnu lorsque ce widget est une boîte de dialogue. Il ne semble pas comme il devrait arriver à cette ligne en raison de l'instruction de retour, mais je ne sais pas comment fermer ce widget après que l'utilisateur appuie sur "envoyer". Ou si la boîte de dialogue.accept() dans mon widget principal gérer cela?

Une dernière chose, ai - je besoin dans mon sous-widget à tous, car il est en cours d'exécution par le biais de mon widget principal à la place?

if __name__=='__main__':
    app=QtGui.QApplication(sys.argv)
    ex=Ui_ShowGroupWidget()
    ex.show()
    sys.exit(app.exec_())

Merci d'avance! Je suis assez nouveau à PyQt, alors j'espère que c'est un peu lisibles.

OriginalL'auteur Emily C | 2015-02-24