将对象传递给多个函数后更新对象
Updating an object after passing it into multiple functions
我正在创建一个对象的实例,将其传递给另一个对象,然后将其传递给另一个对象,如下所示:
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()
在 Information
对象中,它将收集用户输入的信息,然后使用 person
对象的修改器向该对象添加信息。
在 Summary
中,它将获取 person
对象,然后从中收集更多信息,并在进一步改变对象之前喜欢。
但是 Information
中对 person
对象执行的突变不会反映在 Summary
中的 person
对象中。
有人知道为什么会这样吗?
我知道更改没有反映出来,因为我正在将初始空对象 person
发送到 info
和 summary
,但是我怎样才能使 person
summary
中的对象在 information
?
中的更改后更新
程序是这样运行的:
- 用户启动程序
- 用户输入信息然后变异为
person
- 用户点击next进入小程序下一页
- 页面显示上一页输入的信息
所以基本上一旦 person
对象在 Information
中更新,更改就不会反映在发送到 Summary
的 person
对象中,即使它是同一个对象。
我想问的是,如何才能让 person
对象反映在 Information
中所做的 Summary
中的更改?
主要:
#!/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()
信息
#!/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()
总结:
#!/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
个人:
#!/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)
先创建Summary
,然后传给Information
。然后next_op()
可以通知Summary
更新它的标签。
class Information(QWidget):
def __init__(self, individual, rt, summary):
QWidget.__init__(self)
self.setLayout(self.build(individual, rt))
self.setFixedHeight(200)
self.summary = summary
...
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()
self.summary.update_labels(individual)
rt()
class Summary:
def __init__(self, individual, rt):
QWidget.__init__(self)
self.setLayout(self.build(individual, rt))
note = QLabel("This is what you have so far:")
self.fname = QLabel("First name = {}".format(individual.firstname))
self.lname = QLabel("Last name = {}".format(individual.lastname))
vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addWidget(note)
vbox.addStretch(2)
vbox.addWidget(self.fname)
vbox.addStretch(3)
vbox.addWidget(self.lname)
return vbox
def update_labels(self, individual):
self.fname.setText("First name = {}".format(individual.firstname))
self.lname.setText("Last name = {}".format(individual.lastname))
我正在创建一个对象的实例,将其传递给另一个对象,然后将其传递给另一个对象,如下所示:
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()
在 Information
对象中,它将收集用户输入的信息,然后使用 person
对象的修改器向该对象添加信息。
在 Summary
中,它将获取 person
对象,然后从中收集更多信息,并在进一步改变对象之前喜欢。
但是 Information
中对 person
对象执行的突变不会反映在 Summary
中的 person
对象中。
有人知道为什么会这样吗?
我知道更改没有反映出来,因为我正在将初始空对象 person
发送到 info
和 summary
,但是我怎样才能使 person
summary
中的对象在 information
?
程序是这样运行的:
- 用户启动程序
- 用户输入信息然后变异为
person
- 用户点击next进入小程序下一页
- 页面显示上一页输入的信息
所以基本上一旦 person
对象在 Information
中更新,更改就不会反映在发送到 Summary
的 person
对象中,即使它是同一个对象。
我想问的是,如何才能让 person
对象反映在 Information
中所做的 Summary
中的更改?
主要:
#!/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()
信息
#!/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()
总结:
#!/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
个人:
#!/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)
先创建Summary
,然后传给Information
。然后next_op()
可以通知Summary
更新它的标签。
class Information(QWidget):
def __init__(self, individual, rt, summary):
QWidget.__init__(self)
self.setLayout(self.build(individual, rt))
self.setFixedHeight(200)
self.summary = summary
...
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()
self.summary.update_labels(individual)
rt()
class Summary:
def __init__(self, individual, rt):
QWidget.__init__(self)
self.setLayout(self.build(individual, rt))
note = QLabel("This is what you have so far:")
self.fname = QLabel("First name = {}".format(individual.firstname))
self.lname = QLabel("Last name = {}".format(individual.lastname))
vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addWidget(note)
vbox.addStretch(2)
vbox.addWidget(self.fname)
vbox.addStretch(3)
vbox.addWidget(self.lname)
return vbox
def update_labels(self, individual):
self.fname.setText("First name = {}".format(individual.firstname))
self.lname.setText("Last name = {}".format(individual.lastname))