我认为我的回答与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...
这个类中的是Qlabel对象,它们的文本在UI上按下时会更新。
在 new_main_ui 中,有一个对另一个模块( sqr_pull.py )的调用。在 sqr_pull.py 的中途我想在我的UI中更新Qlabel,但我无法弄清楚如何在不获取的情况下引用UI实例(ui1):
NameError: name 'ui1' is not defined
我尝试使用sys.modules[__name__]
时尝试传递变量,如下所示:
:new_main_ui.parent1 = sys.modules[__name__]
sqr_pull.parent2 = sys.modules[__name__]
中的
然后在 sqr_pull 尝试使用`parent2.QLabel.setText进行更改(" blahblahblah")
但它再次没有识别实例名称。最好的方法是什么?
答案 0 :(得分:2)
赋予函数访问对象的干净方法是将此对象传递给函数...
# 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
或任何内容进行黑客攻击只会导致一些难以维护的混乱。