Создание объекта и изменение его параметров в различных классах
Создаю объект в одном классе и пытаюсь реализовать управлением его параметров из другого.
Как правильно такое реализовывается? Может паттерном каким нибудь?
В комментариях к коду описал вопрос. Возможно изначально архитектура классов не верна, готов изменить.
class Car:
color = "red"
year = 215
class Form:
volvo = Car()
def setupUi(self, MainWindow):
super().setupUi(MainWindow)
self.add_function()
def add_function():
self.btn.clicked.connect(self.changeColorBlack)
def changeColorBlack:
self.volvo.color = "black"
# Как из этого класса обращаться к объекту volvo?
class Form_settings:
def setupUi(self, MainWindow):
super().setupUi(MainWindow)
self.add_function()
def add_function():
self.btn.clicked.connect(self.changeColorWhite)
def changeColorWhite:
#Как из этой функции обращаться к объекту volvo?
self.volvo.color = "white"
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Вы не предоставляете минимально-воспроизводимый пример - почему ?
Я увидел вашу задачу так:
from PyQt5 import QtCore, QtGui, QtWidgets
class Car:
color = "red"
year = 215
class Form(QtWidgets.QMainWindow):
def __init__(self, parent):
super().__init__()
self.parent = parent
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.setStyleSheet(f"QMainWindow {{background-color: {self.parent.car.color};}}")
self.btn = QtWidgets.QPushButton('Поменять color')
self.btnMain = QtWidgets.QPushButton('Окно main')
layout = QtWidgets.QGridLayout(self.centralwidget)
layout.addWidget(self.btn, 0, 0)
layout.addWidget(self.btnMain, 1, 0)
self.add_function()
def add_function(self):
self.btn.clicked.connect(self.changeColorBlack)
self.btnMain.clicked.connect(self.openMain)
def changeColorBlack(self):
self.parent.car.color = "blue"
self.setStyleSheet(f"QMainWindow {{background-color: {self.parent.car.color};}}")
def openMain(self):
self.parent.setStyleSheet(f"QMainWindow {{background-color: {self.parent.car.color};}}")
self.parent.show()
self.close()
# Как из этого класса обращаться к объекту volvo?
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.btn = QtWidgets.QPushButton('Поменять color')
self.btnForm = QtWidgets.QPushButton('Окно Form')
layout = QtWidgets.QGridLayout(self.centralwidget)
layout.addWidget(self.btn, 0, 0)
layout.addWidget(self.btnForm, 1, 0)
self.car = Car()
self.setStyleSheet(f"QMainWindow {{background-color: {self.car.color};}}")
self.add_function()
def add_function(self):
self.btn.clicked.connect(self.changeColorWhite)
self.btnForm.clicked.connect(self.openForm)
def changeColorWhite(self):
#Как из этой функции обращаться к объекту volvo?
# self.volvo.color = "white"
self.car.color = "yellow"
self.setStyleSheet(f"QMainWindow {{background-color: {self.car.color};}}")
def openForm(self):
self.form = Form(self)
self.form.setWindowTitle("Hello Form.")
self.form.show()
self.hide()
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.setWindowTitle("Hello World!!")
w.show()
sys.exit(app.exec_())
