Виджет Pyqt5 QDialog не должен открываться, когда включен QTableview не имеет данных - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть виджет 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...