Python 将对象传递到多个函数后更新对象
我正在创建一个对象的实例,将其传递到另一个对象,然后将其传递到另一个对象,如下所示:Python 将对象传递到多个函数后更新对象,python,pyqt,Python,Pyqt,我正在创建一个对象的实例,将其传递到另一个对象,然后将其传递到另一个对象,如下所示: 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() 在Inform
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
对象,然后从中收集更多信息,然后再进一步变异对象
但是在个人
对象上的信息
中执行的突变没有反映在摘要
中的个人
对象中
有人知道为什么会这样吗
我知道这些更改没有反映出来,因为我正在将初始空对象person
发送到info
和summary
,但是如何在信息发生更改后更新summary
中的person
对象
该程序的工作原理如下:
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()
用户启动程序
用户输入信息,然后将信息变为person
用户单击“下一步”转到小程序的下一页
该页面显示上一页中输入的信息
因此,基本上,一旦个人
对象在信息
中更新,这些更改不会反映在发送到摘要
的个人
对象中,即使它是同一个对象
我想问的是,如何让person
对象反映摘要中的更改,这些更改是在信息中完成的
主要内容:
#/usr/bin/python3
从PyQt5.QtWidgets导入QApplication
导入系统
导入根用户界面
进口个人
导入视图.launch
导入基本信息
def main():
app=QApplication(sys.argv)
root=root\u ui.RootUI()
个人=个人。个人()
splash=views.launch.splash(root.next)
信息=基本信息(个人、根、下一个)
summary=views.more\u info.summary(个人,root.next)
root.add_子对象(splash)
根目录。添加子目录(信息)
根目录。添加子目录(摘要)
root.start()
root.show()
app.processEvents()
sys.exit(app.exec_())
main()
信息
#/usr/bin/python3
从PyQt5.QtWidgets导入*
从PyQt5.QtCore导入Qt
从PyQt5.QtGui导入*
类别信息(QWidget):
定义初始(自我、个人、rt):
QWidget.\uuuuu初始化(自)
self.setLayout(self.build(个人,rt))
自设置固定高度(200)
def名字(自我):
fname_box=QHBoxLayout()
fname_label=QLabel(“你的名字是什么?”)
self.\uufname\u input=QLineEdit()
fname_box.addStretch(1)
fname\u box.addWidget(fname\u标签)
fname_box.addStretch(2)
fname\u box.addWidget(self.\u fname\u输入)
返回fname_框
def lastname(self):
lname_box=QHBoxLayout()
lname_label=QLabel(“你姓什么?”)
self.\uuu lname\u input=QLineEdit()
lname_box.addStretch(1)
lname\u box.addWidget(lname\u标签)
lname_box.addStretch(2)
lname\u box.addWidget(自我输入)
返回名称框
def构建(自我、个人、rt):
note=QLabel(“让我们从一些基本信息开始。”)
提交=QPushButton()
submit.setText(“下一步!”)
提交.点击.连接(lambda:self.next_op(个人,rt))
vbox=QVBoxLayout()
vbox.addStretch(1)
vbox.addWidget(注意)
vbox.addStretch(2)
vbox.addLayout(self.firstname())
vbox.addStretch(3)
vbox.addLayout(self.lastname())
vbox.addStretch(4)
vbox.addWidget(提交)
返回vbox
def下一步操作(自我、个人、rt):
如果self.\uufname\u input.text()!=“”或self.\uuu lname\u input.text()!="":
individual.firstname=self.\uufname\u input.text()
individual.lastname=self.\uuu lname\u input.text()
rt()
总结:
#/usr/bin/python3
从PyQt5.QtWidgets导入*
从PyQt5.QtCore导入Qt
从PyQt5.QtGui导入*
课程摘要(QWidget):
定义初始(自我、个人、rt):
QWidget.\uuuuu初始化(自)
self.setLayout(self.build(个人,rt))
note=QLabel(“这是您目前所拥有的:”)
fname=QLabel(“First name={}”.format(individual.firstname))
lname=QLabel(“First name={}”.format(individual.lastname))
vbox=QVBoxLayout()
vbox.addStretch(1)
vbox.addWidget(注意)
vbox.addStretch(2)
vbox.addWidget(fname)
vbox.addStretch(3)
vbox.addWidget(lname)
返回vbox
个人:
#/usr/bin/python3
班级个人:
定义初始化(自):
self.\uu first\u name=“”
self.\u last\u name=“”
@财产
def名字(自我):
返回自己的名字
@firstname.setter
def名字(自我,fname):
self.\uuu first\u name=fname
@财产
def lastname(self):
返回自己的姓氏
@lastname.setter
def lastname(self,lname):
self.\u last\u name=lname
定义(自我):
返回“名字:{},姓氏:{}”。格式(self.firstname,self.lastname)
首先创建摘要
,并将其传递给信息
。然后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()
如果你真的在改变对象,它应该做你期望的事情。所以唯一的解释是它并没有真正改变对象。如果看不到所有相关的代码,就无法知道你做错了什么。@Barmar我已经添加了更多的细节,你能再检查一下吗?不要描述程序在做什么,显示实际的代码。描述是你期望它做的,但是你显然犯了一个错误