Вызов родительского класса из дочернего класса PyQt5

#python #pyqt5

#python #pyqt5

Вопрос:

Люди. Я здесь снова пытаюсь решить проблему здесь . Весь мой код можно увидеть здесь:

 https://gitlab.com/zoiobnu/comissiosystem
  

У меня есть Main.py с помощью MainWindow, в котором есть меню, панель инструментов. Затем панель инструментов вызывает виджет с формой. В этой форме есть кнопка поиска (Pesquisar), которая открывает диалоговое окно и закрывает виджет.

ItemForm.py

     def search(self):
        item_search = ItemSearch(self)
        item_search.show()
        self.close()
  

введите описание изображения здесь

Чем это новое диалоговое окно поиска, я могу выполнить поиск в базе данных и получить идентификатор.

ItemSearch.py

         @pyqtSlot()
        def on_click(self):
            item_form = ItemForm(codigo=self.grdPesquisaCliente.item(self.grdPesquisaCliente.currentRow(), 0).text())
            item_form.show()
            ItemSearch.close()
  

введите описание изображения здесь

Теперь я могу дважды щелкнуть по строке и получить идентификатор ячейки, но я хочу вернуться к первой форме с этим идентификатором ячейки и заполнить поля данными БД.

Но я не знаю, как заставить это работать.

Комментарии:

1. Если я правильно понимаю проблему, вы должны быть в состоянии создать сигнал в ItemSearch, который выдает текст строки в виде кортежа при двойном щелчке по нему. Вам просто нужно было бы подключить сигнал к методу ` set_item(item)` в предыдущей форме и вызвать setText(item[...]) строку, указанную в itemForm.

Ответ №1:

Чтобы решить эту проблему, я сделал это! Создал новый метод в родительском классе для заполнения формы, затем вызвал с помощью self.parent()

ItemSearch.py

 @pyqtSlot()
def on_click(self):
    self.parent().fill_data(codigo=self.grdPesquisaCliente.item(self.grdPesquisaCliente.currentRow(), 0).text())
    self.close()
  

Затем в ItemForm я просто исправил метод, чтобы не закрывать форму после открытого диалога.

itemform.py

 def search(self):
    item_search = ItemSearch(self)
    item_search.show()