Pracuję nad interfejsem użytkownika w PyQt i mam kilka problemów przy próbie użycia QDialog. Zasadniczo mam widżet główny i pod-widget, zapisane w oddzielnych plikach .py; Chciałbym otworzyć pod-widget po kliknięciu określonego przycisku w głównym widgecie. Wydaje się, że otwiera się dobrze.PyQt QDialog - zwracanie wartości i zamykanie z okna dialogowego
Problem dotyczy zwrotu i zamknięcia. Mam przycisk "submit" na moim pod-widżecie - kiedy użytkownik kliknie ten przycisk, chciałbym zwrócić wartość (słownik zrobiony z ich danych wejściowych) do głównego widgetu i zamknąć pod-widget. Nie mogę zrobić żadnej z tych rzeczy za pomocą kodu, który mam teraz.
Odpowiednie fragmenty kodu w głównym widget (można dodać więcej, aby uczynić to samowystarczalny jeśli problem nie jest oczywiste):
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()
nie wydaje mi się trafić na kod po IF-oświadczenie .
Obowiązujący kod z mojego sub-widget (będzie zawierać trochę więcej tutaj):
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()*
* Próbowałem ex.close(), ale tutaj również ex nie jest rozpoznany, kiedy ten widget jest prowadzony jako dialog. Wygląda na to, że nie powinien dostać się do tej linii z powodu instrukcji return, ale nie wiem, jak zamknąć ten widget po tym, jak użytkownik kliknie "submit". A może powinien to zrobić dialog.accept() w moim głównym widżecie?
Ostatnia rzecz - czy w ogóle potrzebuję tego w moim podrzędnym widgetu, ponieważ zamiast tego jest on uruchamiany przez mój główny widget?
if __name__=='__main__':
app=QtGui.QApplication(sys.argv)
ex=Ui_ShowGroupWidget()
ex.show()
sys.exit(app.exec_())
Z góry dziękuję! Jestem całkiem nowy w PyQt, więc mam nadzieję, że jest to trochę czytelne.
To naprawiło to - dziękuję bardzo! –