簡體   English   中英

如何從被調用的模塊中更新實例變量

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

我認為我的答案與此答案有關,但無法完全理解。

我現在意識到我的代碼結構不是很好,但是當前的設置是:

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或其他任何東西進行黑客sys.modules只會導致一些無法維護的混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM