Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Обработка событий дочерне формыв родительской [RSS Feed]

#1 Сен. 16, 2016 09:57:59

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка событий дочерне формыв родительской

Доброго времени суток, почтенные!
Помогите пожалуйста решить такую задачу:
Есть приложение состоящее из двух форм (наривосанных в QT Designer), первая форма отображает содержимае БД, вторая позволяет редактировать содержимое БД. Вторая форма вызывается из первой, и представляет собой отдельный скрипт с ui-файлом.
Как можно реализовать отображение изменений в БД на первой форме после проведения действий во второй. Т.е. я что то добавил в БД и хочу, что бы у меня обновилось содержимое комбобокса, взятое из БД, на первой.

Вот как у меня реализованы формы:
Форма 1

 (Ui_MainWindow, QMainWindow) = uic.loadUiType('forms/main.ui')
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
...
        # Содержимое комбобокса из БД при открытии Формы 1
        functions.comboBoxPapulate(self.ui.comboBox_select_ObjectGroup, 'groups')
...
     # Открытие Формы 2
    def AddForm(self):
        self.additem = additem.AddItemsForm(parent=QApplication.activeWindow())
        self.additem.setWindowModality(Qt.WindowModal)                        
        self.additem.show()
...

Форма 2
 (Ui_AddItemsForm, QMainWindow) = uic.loadUiType('forms/addform.ui')
class AddItemsForm(QMainWindow, Ui_AddItemsForm):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_AddItemsForm()
        self.ui.setupUi(self)
...

Пробовал использовать closeEvent() Формы 2, но не понял как перехватить его в 1й форме.

Буду очень благодарен за помощь! Спасибо!

Офлайн

#2 Сен. 16, 2016 11:37:47

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Обработка событий дочерне формыв родительской

 # Форма 2
class AddItemsForm(QDialog, Ui_AddItemsForm):
        def __init__(self, parent=None):
                QDialog.__init__(self, parent)
                self.setupUi(self)
                # self.accept() - диалог закрывается, self.exec_() возвращает QtGui.QDialog.Accepted
                # self.reject()  - диалог закрывается, self.exec_() возвращает QtGui.QDialog.Rejected
 
        def getData(self):
                """ Возвращаем данные формы """
                return ....
 
# Открытие Формы 2
def AddForm(self):
        form = AddItemsForm(self)
        if form.exec_() == QtGui.QDialog.Accepted:
                dataform = form.getData()



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Сен. 16, 2016 12:40:45)

Онлайн

#3 Сен. 16, 2016 12:25:52

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка событий дочерне формыв родительской

Rodegast
Я понял, что из QMainWindow необходимо сделать QDialog, но всеравно вылетает ошибка:
AttributeError: ‘AddItemsForm’ object has no attribute ‘exec_’

Офлайн

#4 Сен. 16, 2016 12:39:51

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка событий дочерне формыв родительской

Сделал следующим образом:

 """ открытие Формы 2 """
 def AddForm(self):
        additem_form = additem.AddItemsForm(self)
        additem_form.setWindowModality(Qt.WindowModal)
        additem_form.show()

 """ Форма 2 """
class AddItemsForm(QMineWindow, Ui_AddItemsForm):
    def __init__(self, parent=None):
        self.parent = parent
        QMineWindow.__init__(self, self.parent)
        self.ui = Ui_AddItemsForm()
        self.ui.setupUi(self)
...
    def closeEvent(self, QCloseEvent):
        self.MW = self.parent
        self.MW.populateComboBox()

Хотя возможно это и не совсем правильно.

Офлайн

#5 Сен. 16, 2016 12:40:13

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Обработка событий дочерне формыв родительской

Посмотри какого типа AddItemsForm. Поменять его на QDialog нужно также и в ui файле, иначе как минимум будут проблемы с компоновкой.
P.S. form.exec_() конечно-же возвращает Accepted/Rejected с этим я немного ошибся.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Онлайн

#6 Сен. 16, 2016 13:01:10

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Обработка событий дочерне формыв родительской

Rodegast
Посмотри какого типа AddItemsForm. Поменять его на QDialog нужно также и в ui файле, иначе как минимум будут проблемы с компоновкой.P.S. form.exec_() конечно-же возвращает Accepted/Rejected с этим я немного ошибся.
Спасибо за помощь!


Офлайн

  • Начало
  • » GUI
  • » Обработка событий дочерне формыв родительской[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version