У меня есть виджет QDialog, который среди прочего включает кнопку QPush для закрытия формы и QtableView, показывающий данные из формы QSqlQuery для дальнейшей обработки. Идея состоит в том, чтобы прервать или закрыть открытие формы, когда нет доступных данных (qry.size () <1). Я помещаю метод closeWidget, который запускается как QPushbotton и вызывается, когда возникает «условие без данных», которое должно закрывать форму. </p>
При вызове метода закрытия из QPushBotton форма закрывается, как и ожидалось, но когда он вызывается «условием отсутствия данных» как из __init__
, так и изнутри методов setUI, форма продолжает работу, не прерывает открытие.
Я пробовал следующее: Помещение «« условия данных »внутри метод setUI, поместите «отсутствие данных» в конец метода setUI и поместите условие «нет данных» в метод __init__
после вызова метода setUI без успеха.
До закрытия код, который я намеревался self.close (), super (). close () и self.done (QDialog.rejected) с похожими результатами.
Я также вызываю закрывающие методы изнутри refre sh табличный метод, когда условие применяется, и в этом случае оно работает просто отлично.
Я предполагаю, что я вхожу внутрь al oop. Любой Справка приветствуется
Примечание: QTableView - это пользовательский класс, производный от него (TableViewAndModel), но я полагаю, что он не влияет на результаты, так как условие правильно выполняется запросом.
def __init__(self, mode, db, con_string, agreementId=None, parent=None):
super().__init__()
self.agreementId = agreementId
self.con_string = con_string
self.db = db
if not self.db.isOpen():
self.db.open()
self.parent = parent
self.supplierId = parent.supplierId
# ...
self.mode = mode
if not self.db.isOpen():
self.db.open()
self.setModal(True)
self.setUI()
def setUI(self):
# ...
self.pushCancel = QPushButton('Close')
self.pushCancel.setMaximumWidth(80)
self.pushCancel.clicked.connect(self.closeWidget)
colorDict = {}
if self.mode == OPEN_NEW:
colDict = {0 :("Provider", True, True, False, None ),
1 :("AgrID", False, True, True, None),
# ...
}
else:
colDict = {0 :("Provider", True, True, False, None ),
# ...
}
qryLoad = QSqlQuery(self.db)
qryLoad.exec("CALL receivebroken_loadhorses({}, '{}', {})".format(self.agreementId,
self.dateDor.date.toString("yyyy-MM-dd"),
self.mode))
if qryLoad.lastError().type() != 0:
raise DataError("setUI - load horse", qryLoad.lastError().text())
self.table = TableViewAndModel(colDict, colorDict, (100,100), qryLoad)
self.table.doubleClicked.connect(self.getHorseData)
# ...
vLayout.addLayout(hLayout)
self.setLayout(vLayout)
if qryLoad.size() < 1:
QMessageBox.warning(self, "No data", "There are not horses to be considered!",
QMessageBox.Ok)
self.closeWidget()
@pyqtSlot()
def closeWidget(self):
super().close()
#self.done(QDialog.Rejected)