#python #pyqt
#питон #pyqt
Вопрос:
У меня есть главное окно, созданное в одном модуле python. Этот модуль также содержит определение класса, используемое для создания объекта с именем my_settings.
У меня также есть отдельный модуль, который создает другое окно (которое по разным причинам должно находиться в другом модуле). Это окно позволяет вводить различные данные, такие как открытие файла и сохранение некоторых настроек после нажатия кнопок бла-бла-бла.
Что я хочу сделать, так это изменить атрибуты my_settings. Упрощенная версия кода представляет собой:
ОСНОВНОЙ МОДУЛЬ
class MainWindow(QMainWindow): def __init__(self,parent=None): super(MainWindow, self).__init__(parent) QMainWindow.__init__(self) uic.loadUi(self.some_directory "arc_custom_main.ui", self) self.some_button.clicked.connect(self.open_some_widget) def open_some_widget(self): widget = widget_in_other_module(self) widget_in_other_module.exec_() app = QApplication(sys.argv) my_settings=settings() _mainWindow = MainWindow() _mainWindow.show()
ОТДЕЛЬНЫЙ МОДУЛЬ
class widget_in_other_module(QDialog): def __init__(self, parent): my_settings.temppath = my_settings.OutputDir QDialog.__init__(self) self.parent = parent my_settings.some_attribute= foo uic.loadUi("some.ui", self) self.pushButtonOpenMain.clicked.connect(self.openMain) def openMain(self): my_settings.some_other_attibute=bar
Проблема, с которой я столкнулся, заключается в том, что я не могу найти способ доступа к my_settings в методе openMain модуля widget_in_other_module. Я немного новичок в qt и ни за что на свете не могу решить, где мне следует передавать свои настройки. По разным причинам мне нужно, чтобы вся функциональность модуля widget_in_other_module находилась за пределами основного модуля (в основном для удобства чтения и будущих запланированных изменений в основном модуле). Я старался,насколько мог, например, включить его в качестве параметра в строку self.pushButtonOpenMain.clicked.connect(self.openMain, my_settings), но это, похоже, недопустимо. Я упускаю здесь что-то основное?
Ответ №1:
Создайте экземпляр переменной настроек в отдельном модуле и импортируйте эту переменную туда, где она вам нужна. Это может быть объект класса или просто словарь.
storage.py
class Settings: def __init__(self): print("Settings") my_settings = Settings()
MainWindow.py
from PyQt5.QtWidgets import QMainWindow, QApplication import sys from Widget import Widget from storage import my_settings class MainWindow(QMainWindow): def __init__(self,parent=None): super(MainWindow, self).__init__(parent) QMainWindow.__init__(self) self.open_some_widget() def open_some_widget(self): widget = Widget() widget.show() widget.test() self._widget = widget my_settings.foo = 10 app = QApplication(sys.argv) _mainWindow = MainWindow() _mainWindow.show() app.exec_()
Widget.py
from PyQt5.QtWidgets import QWidget from storage import my_settings class Widget(QWidget): def test(self): print(my_settings.foo)