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
Vous devez vous connecter pour publier un commentaire.
Il existe quelques problèmes. Le
if dialog.exec_():
ligne ne sera possible que si le dialogue est sorti avecaccept()
. Travaillez-vous avec QDesigner? Si oui, vérifiez cette pour une autre façon de travailler. SiUi_ShowGroupWidget
juste contenir le code que vous écrivez, vous devriez faire qu'il hérite de QDialog au lieu de QWidget. Alors, au lieu de le fermer avecself.close()
, vous la fermez avecself.accept()
. Vous ne pouvez pas retourner un diccionary, mais vous pouvez l'enregistrer comme un attribut de l'objet. Une fois ledialog.exec_()
retours, vous pouvez accéder à cet attribut.Il pourrait être quelque chose comme ceci:
L'autre:
Enfin,
if __name__=='__main__':
signifie "si ce fichier est exécuté, le fichier principal, alors..", ce qui n'est pas le cas que vous êtes, y compris et de l'utiliser à partir d'un autre. Ainsi, vous pouvez le supprimer, cependant, l'idée est que vous pouvez exécuterpython ui_mywidget.py
afin de la tester ou voir l'Interface utilisateur défini sur ce fichierOriginalL'auteur Smasho