2015-06-22 2 views
0

Я пишу программу, и я хочу, чтобы внешняя функция получила доступ к атрибуту главного окна. Это должна быть внешняя функция, потому что она предоставляется методом импорта. Я создал действительно маленький MWE, чтобы дать представление о проблеме. Здесь функция func должна печатать значение MainWindow's vari.Как получить доступ к атрибуту главного окна

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 получает сам вариант». Я думаю, что это хорошее решение, но, похоже, оно не соответствует тому, что просит ОП. – IronManMark20

+0

К сожалению, это не решение моей проблемы. Внешний класс на самом деле исправлен, и мне не разрешено ничего менять в классе MainWindow. – Pygmalion

+0

Как я сказал в ответе, если требования действительно состоят в том, что каждый должен знать ** экземпляр ** другого, любое решение, в котором он не передает свой пример другому, будет звучать как чудо для меня. Но я надеюсь, что кто-то придумает что-то, как мне теперь любопытно, если это вообще возможно. – lucasnadalutti

Смежные вопросы