2015-06-22 51 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