Ich arbeite an einer Benutzeroberfläche in PyQt, und ich habe ein paar Probleme mit dem Versuch, QDialog zu verwenden. Im Wesentlichen habe ich ein Haupt-Widget und ein Sub-Widget, die in separaten .py-Dateien gespeichert sind; Ich möchte das Unter-Widget öffnen, wenn ich auf eine bestimmte Schaltfläche im Haupt-Widget klicke. Dies scheint sich gut zu öffnen.PyQt QDialog - Rückgabe eines Wertes und Schließen aus dem Dialog
Das Problem kommt mit dem Zurückbringen und Schließen. Ich habe eine Schaltfläche "Submit" auf meinem Sub-Widget - wenn der Benutzer auf diese Schaltfläche klickt, möchte ich einen Wert (ein Wörterbuch aus ihrer Eingabe) an das Haupt-Widget zurückgeben und das Sub-Widget schließen. Ich kann keines dieser Dinge mit dem Code, den ich gerade habe, tun.
Anwendbar Bit-Code im Haupt Widget (mehr hinzuzufügen umluftunabhängigem zu machen, wenn das Problem nicht offensichtlich ist):
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()
Ich scheine nie den Code nach der if-Anweisung getroffen .
Der anwendbare Code von meinem Sub-Widget (ein bisschen mehr hier enthalten):
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()*
* ich auch hier versucht haben ex.close(), aber ex nicht erkannt wird, wenn dieses Widget ausgeführt wird als ein Dialog. Es scheint nicht so, dass es wegen der return-Anweisung zu dieser Zeile kommen sollte, aber ich weiß nicht, wie ich das Widget sonst schließen soll, nachdem der Benutzer "submit" gedrückt hat. Oder sollte das dialog.accept() in meinem Haupt-Widget das behandeln?
Eine letzte Sache - brauche ich das überhaupt in meinem Sub-Widget, da es stattdessen durch mein Haupt-Widget läuft?
if __name__=='__main__':
app=QtGui.QApplication(sys.argv)
ex=Ui_ShowGroupWidget()
ex.show()
sys.exit(app.exec_())
Vielen Dank im Voraus! Ich bin ziemlich neu bei PyQt, also hoffentlich ist das etwas leserlich.
festgelegt, die es behoben - vielen Dank! –