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我已经添加了更多的细节,你能再检查一下吗?不要描述程序在做什么,显示实际的代码。描述是你期望它做的,但是你显然犯了一个错误