我认为我的答案与此答案有关,但无法完全理解。
我现在意识到我的代码结构不是很好,但是当前的设置是:
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__]
:
在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
或什么,只会导致一些难以维护一塌糊涂。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句