@pypyshka

Как получить доступ к интерфейсу из другого модуля?

Добрый день.

Подскажите, пожалуйста, возможно ли получить доступ к интерфейсу программы из другого модуля, то есть так:
main.py:
from PyQt5 import QtWidgets, QtGui, uic
import sys

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

    def load_main_window(self):
        uic.loadUi('resources/main.ui', self)
        self.setWindowTitle('Program')
        self.show()

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main_window = MainWindow()
    main_window.load_main_window()

    sys.exit(app.exec_())


Данный модуль, main.py, открывает окно, в котором есть label.
Я попробовал сделать ещё один модуль print_label.py и создать экземпляр класса, чтобы потом попробовать получить доступ к label:
from main import MainWindow

a = MainWindow()
a.label.setText('Test')

Смысл в том, что я хотел, чтобы в main.py импортировать модуль print_label.py и при запуске main.py выводился текст в label. Но, чувствую, не так это делается, так как при запуске print_label.py или при его импорте в main.py программа сразу завершается без ошибок. Что можно сделать в данном случае?
  • Вопрос задан
  • 354 просмотра
Решения вопроса 1
@Tirael78
Завершается она как раз таки с ошибкой и очень серьезной - вы совершили рекурсивный вызов и приложение упало достигнув предела рекурсии.

Если вы хотите получить доступ к объекту из разных модулей, то, либо инициализируйте его в третьем модуле и импортируйте, либо передавайте как ссылку на объект.
Это так, на вскидку, без понимания почему вам нужно сделать именно так.

Вообще вам имеет смысл почитать о том как правильно развязывать компоненты в приложении.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы