I am creating an instance of an object, passing it into another object, and then passing it into yet another object like this:
person = Person(fname, lname)
info = Information(person)
summary = Summary(person)
qt_stack_widget.add_child(info)
qt_stack_widget.add_child(summary)
qt_stack_widget.start()
qt_stack_widget.show()
In the Information object, it will collect information with user input then use the person object's mutators to add information to that object.
In Summary, it will take the person object then collect some more information from it and like before mutate the object further.
But the mutations performed in Information on the person object is not reflected in the person object in Summary.
Does anyone know why this would be?
I know that the changes are not reflected because I am sending the initial empty object person to info and summary, but how can I make the person object in summary update after the changes in information?
The program works like this:
- the user launches the program
- the user enters information which is then mutated into
person - the user clicks next to go to the next page of the applet
- the page displays the information entered in the previous page
So basically once the person object is updated in Information, the changes are not reflected in the person object that was sent to Summary, even though it's the same object.
What I'm asking is, how can I get the person object to reflect the changes in Summary that was done in Information?
Main:
#!/usr/bin/python3
from PyQt5.QtWidgets import QApplication
import sys
import root_ui
import Individual
import views.launch
import basic_info
def main():
app = QApplication(sys.argv)
root = root_ui.RootUI()
individual = Individual.Individual()
splash = views.launch.Splash(root.next)
info = basic_info.Information(individual, root.next)
summary = views.more_info.Summary(individual, root.next)
root.add_child(splash)
root.add_child(info)
root.add_child(summary)
root.start()
root.show()
app.processEvents()
sys.exit(app.exec_())
main()
Information
#!/usr/bin/python3
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5.QtGui import *
class Information(QWidget):
def __init__(self, individual, rt):
QWidget.__init__(self)
self.setLayout(self.build(individual, rt))
self.setFixedHeight(200)
def firstname(self):
fname_box = QHBoxLayout()
fname_label = QLabel("What's your first name?")
self.__fname_input = QLineEdit()
fname_box.addStretch(1)
fname_box.addWidget(fname_label)
fname_box.addStretch(2)
fname_box.addWidget(self.__fname_input)
return fname_box
def lastname(self):
lname_box = QHBoxLayout()
lname_label = QLabel("What's your last name?")
self.__lname_input = QLineEdit()
lname_box.addStretch(1)
lname_box.addWidget(lname_label)
lname_box.addStretch(2)
lname_box.addWidget(self.__lname_input)
return lname_box
def build(self, individual, rt):
note = QLabel("Let's start off with some basic information.")
submit = QPushButton()
submit.setText("Next!")
submit.clicked.connect(lambda: self.next_op(individual, rt))
vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addWidget(note)
vbox.addStretch(2)
vbox.addLayout(self.firstname())
vbox.addStretch(3)
vbox.addLayout(self.lastname())
vbox.addStretch(4)
vbox.addWidget(submit)
return vbox
def next_op(self, individual, rt):
if self.__fname_input.text() != "" or self.__lname_input.text() != "":
individual.firstname = self.__fname_input.text()
individual.lastname = self.__lname_input.text()
rt()
Summary:
#!/usr/bin/python3
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5.QtGui import *
class Summary(QWidget):
def __init__(self, individual, rt):
QWidget.__init__(self)
self.setLayout(self.build(individual, rt))
note = QLabel("This is what you have so far:")
fname = QLabel("First name = {}".format(individual.firstname))
lname = QLabel("First name = {}".format(individual.lastname))
vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addWidget(note)
vbox.addStretch(2)
vbox.addWidget(fname)
vbox.addStretch(3)
vbox.addWidget(lname)
return vbox
Individual:
#!/usr/bin/python3
class Individual:
def __init__(self):
self.__first_name = ""
self.__last_name = ""
@property
def firstname(self):
return self.__first_name
@firstname.setter
def firstname(self, fname):
self.__first_name = fname
@property
def lastname(self):
return self.__last_name
@lastname.setter
def lastname(self, lname):
self.__last_name = lname
def __str__(self):
return "First name: {}, Last name: {}".format(self.firstname, self.lastname)
Individualand just use a regular attribute. The whole point ofpropertyis not to write boilerplate getters and setters