如何从被调用模块中更新实例变量

How can I update an instance variable from within a called module

我认为我的回答与 this answer 有关,但我不太理解它。

我现在意识到我的代码结构不是很好,但是当前的设置是:

main_run.py

app = QtGui.QApplication(sys.argv)
app.processEvents()
ui1 = new_main_ui.Ui_Form_Main()
ui1.show()
sys.exit(app.exec_())

new_main_ui

class Ui_Form_Main(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)
        ...etc...

在这个 class 中是 Qlabel 对象,当在 UI 上按下按钮时,它们的文本会更新。

new_main_ui 中调用了另一个模块 (sqr_pull.py),该模块执行一些操作。 sqr_pull.py 中途我想更新 UI 中的 Qlabel,但我不知道如何引用 UI 实例(ui1 ) 没有得到:

NameError: name 'ui1' is not defined

我尝试在使用 sys.modules[__name__] 时尝试传递变量,如下所示:

main_run中:new_main_ui.parent1 = sys.modules[__name__]

new_main_ui中:sqr_pull.parent2 = sys.modules[__name__]

然后在 sqr_pull 中尝试使用 `parent2.QLabel.setText("blahblahblah")

进行更改

但它又无法识别实例名称。执行此操作的最佳方法是什么?

让函数访问对象的简洁方法是将此对象传递给函数...

# worker.py

def work(ui):
    some_result = do_something()
    ui.update(some_result)
    other_result = do_something_else()

# ui.py

import worker

class Ui(object):
    def some_action(self):
        worker.work(self)        

    def update(self, data):
        self.show_data_somewhere(data)

使用 sys.modules 或其他方式进行黑客攻击只会导致一些无法维护的混乱。