Я работаю над пользовательским интерфейсом в PyQt, и у меня возникают проблемы с использованием QDialog. По существу у меня есть главный виджет и суб-виджет, сохраненный в отдельных файлах .py; Я хотел бы, чтобы суб-виджет открывался, когда я нажимаю на определенную кнопку в главном виджетах. Кажется, это нормально.PyQt QDialog - возврат значения и закрытие из диалогового окна
Проблема возникает с возвратом и закрытием. У меня есть кнопка «отправить» в моем субвизоре - когда пользователь нажимает на эту кнопку, я хотел бы вернуть значение (словарь, сделанный с их ввода), в главный виджет и закрыть суб-виджет. Я не могу сделать ничего из этого с кодом, который у меня есть сейчас.
Применимых бит кода в главном виджете (можно добавить больше, чтобы сделать его самодостаточным, если проблема не очевидна):
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()
Я никогда, кажется, попал в код после Условного оператора ,
применимый код из моего суб-виджета (будет включать в себя немного больше, здесь):
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()*
* Я попытался ex.close() здесь, но бывший не распознается, когда этот виджет запускается как диалог. Кажется, он не должен попасть в эту строку из-за оператора return, но я не знаю, как еще закрыть этот виджет после того, как пользователь нажмет «отправить». Или должен ли этот диалог dialog.accept() в моем главном виджете?
Последнее, что мне нужно в моем субвизоре, поскольку оно выполняется через мой главный виджет?
if __name__=='__main__':
app=QtGui.QApplication(sys.argv)
ex=Ui_ShowGroupWidget()
ex.show()
sys.exit(app.exec_())
Заранее благодарен! Я довольно новичок в PyQt, поэтому, надеюсь, это несколько разборчиво.
Это исправило это - большое вам спасибо! –