Как перезагрузить MainWindow после добавления новых данных из дочернего окна - PullRequest
0 голосов
/ 11 мая 2019

Я создал графический интерфейс, который отображает список профилей, извлеченных из базы данных.

Проблема заключается в добавлении нового профиля.Он открывает новое диалоговое окно, в которое вставляются данные нового профиля.При нажатии для сохранения профиля данные сохраняются в базе данных, и вызывается функция для повторного рендеринга основного графического интерфейса с новыми данными (в который добавляется новый профиль).

Проблема заключается в том, чтоГлавное окно со списком профилей не загружает вновь добавленные данные.

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtPrintSupport import *
from account_class import Account
from database_class import Database as db

import os
import sys
import time

"""
MAIN WINDOW
"""
class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        #initial load of existing profiles
        DB = db('accounts_data.db')    
        DB.db_connect()
        profiles = DB.get_profiles_list()

        #Communication with the chid window
        self.dialog = Add_New_Profile_Dialog()
        self.load_profiles_list(profiles)


    def load_profiles_list(self, profiles):

        layout = QVBoxLayout()

        #profiles added to GUI        
        for profile in self.profiles:
            #print(profile[0])
            profile_layout = QHBoxLayout()
            profile_label = QLabel()
            profile_label.setText(str(profile[0]))
            btn = QPushButton("Launch")         
            self.create_horizontal_layout(profile[0], profile[1], 'Proxy Name')
            scrollLayout.addWidget(self.horizontalGroupBox)

        container = QWidget()
        container.setLayout(layout)
        print("from load_profile")
        self.setCentralWidget(container)

    """Function called from child window to update the profile list of gui with newly added profile"""
    def update_profiles_list(self):

        DB = db('accounts_data.db')    
        DB.db_connect()
        profiles = DB.get_profiles_list()
        self.load_profiles_list(profiles)     
        print("check from update_profiles_list")
        return

"""Child window when new profile is inserted"""
class ChildWidowDialog(QMainWindow):

    def save_profile_db(self):    
        #Adding new data to Database
        DB = db('accounts_data.db')    
        DB.db_connect()
        DB.add_profile(profile_name, device_selected, os_browser[1], os_browser[0], proxy)

        #function from main window called to update profile
        MainWindow().update_profiles_list()
        self.close()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setApplicationName("Profiles")

    window = MainWindow()

app.exec_()

Функция update_profiles_list из MainWindow вызывается и отображается сообщение терминала "check from update_profiles_list", означающее, что связь между окнами установлена.

Однакографический интерфейс MainWindow не загружается, когда функция self.load_profiles_list () вызывается из update_profiles_list

...