Найти - Пользователи
Полная версия: Обработка событий дочерне формыв родительской
Начало » GUI » Обработка событий дочерне формыв родительской
1
vladimirse
Доброго времени суток, почтенные!
Помогите пожалуйста решить такую задачу:
Есть приложение состоящее из двух форм (наривосанных в 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й форме.

Буду очень благодарен за помощь! Спасибо!
Rodegast
 # Форма 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()
vladimirse
Rodegast
Я понял, что из QMainWindow необходимо сделать QDialog, но всеравно вылетает ошибка:
AttributeError: ‘AddItemsForm’ object has no attribute ‘exec_’
vladimirse
Сделал следующим образом:
 """ открытие Формы 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()

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


This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB