Вызов метода из другого класса при нахождении в методе, который уже был вызван из первого класса - PullRequest
0 голосов
/ 25 мая 2020

Я знаю, что есть масса похожих вопросов, но :
Для этого случая я не нашел правильного подсказки.
Обзор: Я делаю GUI (PyQt5). Итак, есть основной класс "Ui_MainWindow()" и класс "Allgorythm()", в которых выполняются некоторые вычисления. Сначала вызывается "Ui_MainWindow()", а затем экземпляры "Allgorythm()".
Моя идея: В "Ui_MainWindow()" Я вызываю метод, который находится в "Allgorythm()" и называется "def update(self)". Теперь в "def update(self)" я хочу вызвать метод "def move(self)", который снова находится в первом классе "Ui_MainWindow()".
Моя проблема: Чтобы вызвать метод другим классом, мне нужно сначала создать его экземпляр, но я не могу создать экземпляр класса дважды (в начале и во втором классе), потому что это бесконечно ошибки.
Наглядный пример:

class Allgorythm():
    def __init__(self, job_list):
        self.job_list = job_list
    def uptade(self):
        main = Ui_MainWindow() # this is the probelm, I can not do this twice
        main.move()

class Ui_MainWindow():
    def __init__(self, *args, **kwargs):
        super(Ui_MainWindow, self).__init__(*args, **kwargs)
        self.setupUi()
    def setupUi(self):
        """ random code """
    def move(self):
        """ random code """

if __name__ == "__main__":
    main = Ui_MainWindow() # And I need it here. 
    main.show()

Скажите, пожалуйста, если мое объяснение непонятно. Я ценю вашу помощь.

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Вы можете просто добавить объект UI_MainWindow в качестве аргумента вашей функции обновления, например:

def uptade(self, ui_Window):
    main = ui_Window
    main.move()

Затем, чтобы вызвать его из вашего класса UI_MainWindow, вы выполните:

allgorythm = Allgorythm(job_list)
allgorythm.uptade(self)
0 голосов
/ 25 мая 2020

Я думаю, что тот факт, что ваше главное окно не наследуется от QMainWindow, вызовет у вас проблемы, но, не обращая на это внимания, вот как я бы предложил вложить ваши объекты:

# define Ui_MainWindow first

class Algorithm():
    def __init__(self, job_list):
        self.job_list = job_list
        self.main_window = Ui_MainWIndow()

    def show(self):
        self.main_window.show()

    def update(self):
        self.main_window.move()

if __name__ == "__main__":
    # generate job_list somehow?
    algo = Algorithm(job_list)
    algo.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...