QDialog.done() 没有关闭 QDialog
QDialog.done() not closing the QDialog
我有以下使用 QT Designer 构建的 QDialog,我正在尝试将字段中的一些数据保存到 sqlite 数据库,然后关闭 QDialog
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QDialog
from DatabaseOperations import DatabaseOperations
class Ui_MaterialEdit(QDialog):
def __init__(self, sqlite, material_id):
super().__init__()
self.material_id = material_id
self.sqlite = sqlite
self.database_operations = DatabaseOperations(sqlite)
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(460, 259)
self.groupBox = QtWidgets.QGroupBox(Dialog)
self.groupBox.setGeometry(QtCore.QRect(10, 10, 441, 241))
self.groupBox.setTitle("")
self.groupBox.setObjectName("groupBox")
self.code_lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.code_lineEdit.setGeometry(QtCore.QRect(30, 120, 251, 20))
self.code_lineEdit.setObjectName("lineEdit_4")
self.save_btn = QtWidgets.QPushButton(self.groupBox)
self.save_btn.setGeometry(QtCore.QRect(190, 200, 101, 23))
self.save_btn.setObjectName("save_btn")
self.save_btn.clicked.connect(lambda: self.saveMaterialData())
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def saveMaterialData(self):
material_code = self.code_lineEdit.text()
self.database_operations.updateMaterial(self.material_id, material_code)
self.done(1)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "تعديل المادة"))
self.code_label.setText(_translate("Dialog", "الكود:"))
self.save_btn.setText(_translate("Dialog", "حفظ"))
我希望它在点击 save_btn
后关闭。然而,事实并非如此。我已经尝试了 self.done(1)
、self.reject()
、self.accept()
、self.close()
。没有抛出任何错误,但是 QDialog 没有关闭。
通过改变这个解决问题
self.save_btn.clicked.connect(lambda: self.saveMaterialData())
至此
self.save_btn.clicked.connect(Dialog.accept)
self.save_btn.clicked.connect(lambda: self.saveMaterialData())
我有以下使用 QT Designer 构建的 QDialog,我正在尝试将字段中的一些数据保存到 sqlite 数据库,然后关闭 QDialog
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QDialog
from DatabaseOperations import DatabaseOperations
class Ui_MaterialEdit(QDialog):
def __init__(self, sqlite, material_id):
super().__init__()
self.material_id = material_id
self.sqlite = sqlite
self.database_operations = DatabaseOperations(sqlite)
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(460, 259)
self.groupBox = QtWidgets.QGroupBox(Dialog)
self.groupBox.setGeometry(QtCore.QRect(10, 10, 441, 241))
self.groupBox.setTitle("")
self.groupBox.setObjectName("groupBox")
self.code_lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.code_lineEdit.setGeometry(QtCore.QRect(30, 120, 251, 20))
self.code_lineEdit.setObjectName("lineEdit_4")
self.save_btn = QtWidgets.QPushButton(self.groupBox)
self.save_btn.setGeometry(QtCore.QRect(190, 200, 101, 23))
self.save_btn.setObjectName("save_btn")
self.save_btn.clicked.connect(lambda: self.saveMaterialData())
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def saveMaterialData(self):
material_code = self.code_lineEdit.text()
self.database_operations.updateMaterial(self.material_id, material_code)
self.done(1)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "تعديل المادة"))
self.code_label.setText(_translate("Dialog", "الكود:"))
self.save_btn.setText(_translate("Dialog", "حفظ"))
我希望它在点击 save_btn
后关闭。然而,事实并非如此。我已经尝试了 self.done(1)
、self.reject()
、self.accept()
、self.close()
。没有抛出任何错误,但是 QDialog 没有关闭。
通过改变这个解决问题
self.save_btn.clicked.connect(lambda: self.saveMaterialData())
至此
self.save_btn.clicked.connect(Dialog.accept)
self.save_btn.clicked.connect(lambda: self.saveMaterialData())