如何从被调用模块中更新实例变量
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
或其他方式进行黑客攻击只会导致一些无法维护的混乱。
我认为我的回答与 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
或其他方式进行黑客攻击只会导致一些无法维护的混乱。