У меня есть Mainwindow, открывающее диалог по нажатию кнопки. Я хочу переопределить функцию принятия диалога, чтобы реализовать некоторые пользовательские функции, которые должны быть выполнены до принятия диалога. Вот пример кода моего главного окна.
from PySide2 import QtCore, QtGui, QtWidgets
from add_new import Add_new_dialog
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(500, 100)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushNew_Bed = QtWidgets.QPushButton(self.centralwidget)
self.pushNew_Bed.setObjectName("pushNew_Bed")
self.pushNew_Bed.resize(QtCore.QSize(500,100))
self.pushNew_Bed.clicked.connect(self.on_add_new_clicked)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushNew_Bed.setText(_translate("MainWindow", "Add New Bed"))
def on_add_new_clicked(self):
Dialog = QtWidgets.QDialog()
Dialog.ui = Add_new_dialog()
Dialog.ui.setupUi(Dialog)
#dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
retValue = Dialog.exec_()
if retValue == 1:
print("Accepted")#dialog.calendarWidget.selectedDate())
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
А вот это диалоговое окно.
from PySide2 import QtCore, QtGui, QtWidgets
import sys
class Add_new_dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
Dialog.setMinimumSize(QtCore.QSize(400, 300))
Dialog.setMaximumSize(QtCore.QSize(400, 300))
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.retranslateUi(Dialog)
#self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.accepted.connect(self.custom_func)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
def custom_func(self):
Dialog.accept()
print("custom func")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Add_new_dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
Если я запускаю диалоговое окно автономно, все работает как положено. Однако, если я вызываю это из главного окна, я, как и ожидалось, получаю ошибку.
Dialog.accept()
NameError: name 'Dialog' is not defined
Я попытался добавить следующий код в диалог, чтобы перезаписать функцию принятия:
def accept(self):
self.custom_func()
Dialog.done(QtWidgets.QDialog.Accepted)
И привязать кнопку к этой функции
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(Dialog.reject)
Опять же, как и ожидалось, я получаю тот же результат. Чтение документации не сильно помогло. Любая помощь очень ценится, и я прошу прощения за этот вопрос noobi sh, но я начинающий с gui. Заранее спасибо.