2015-06-22 85 views
0

我正在編寫一個程序,我想讓外部函數訪問主窗口的屬性。它必須是一個外部函數,因爲它是由導入方法提供的。我已經創建了一個非常小的MWE來了解這個問題。這裏功能func應該打印的值爲MainWindowvari如何訪問主窗口的屬性

class importedclass(): 
    def func(self): 
     print(win.vari) 

x=importedclass() 

class MainWindow(QtGui.QWidget): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     self.vari = 1 
     x.func() 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    win = MainWindow() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

只是要清楚:importedclass類是我的固定補課,不准我在MainWindow類改變什麼!

+0

'func()'應該有一個參數,所以你可以傳遞self.vari,如果不是? – IronManMark20

+0

不,這個想法是'func'獲取'vari'本身 – Pygmalion

+0

我假設你寫了'importedclass'。那是對的嗎? – IronManMark20

回答

0

因爲每個人都需要另一個的實例,他們中的一個需要將自己傳遞給另一個。檢查此示例解決方案是否完全解決您的問題。

# file 1 

class External(): 
    def func(self, win): 
     print(win.vari) 


# file 2 

class MainWindow(QtGui.QWidget): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     self.vari = 1 
     import External 
     x = External() 
     x.func(self) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    win = MainWindow() 
    sys.exit(app.exec_()) 
+0

我在評論中提出了這個建議,而OP說'不,這個想法是func自己得到了vari。我認爲這是一個很好的解決方案,但它似乎並不符合OP的要求。 – IronManMark20

+0

不幸的是,這不是解決我的問題。外部類實際上是修正的,我不允許在MainWindow類中改變任何東西。 – Pygmalion

+0

正如我在答案中所述,如果要求確實是每個人都必須知道另一個的**實例**,那麼任何一個不會將其實例傳遞給另一個的解決方案對我來說聽起來就像是奇蹟。但我希望有人提出一些事情,因爲我現在也很好奇,如果這是可能的。 – lucasnadalutti