Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问主窗口的属性_Python - Fatal编程技术网

Python 如何访问主窗口的属性

Python 如何访问主窗口的属性,python,Python,我正在写一个程序,我想让外部函数访问主窗口的属性。它必须是一个外部函数,因为它是由导入方法提供的。我创建了一个非常小的MWE来给出问题的想法。这里函数func应该打印main窗口的vari的值 class importedclass(): def func(self): print(win.vari) x=importedclass() class MainWindow(QtGui.QWidget): def __init__(self): s

我正在写一个程序,我想让外部函数访问主窗口的属性。它必须是一个外部函数,因为它是由导入方法提供的。我创建了一个非常小的MWE来给出问题的想法。这里函数
func
应该打印
main窗口的
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
class是我的修复类,我不允许在
main窗口中更改任何内容

因为每一个都需要另一个的实例,所以其中一个需要将自己传递给另一个。检查此示例解决方案是否完全解决了您的问题

# 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_())

func()
应该有一个参数,这样您就可以传递self.vari,不是吗?不,这个想法是
func
获取
vari
它自己我假设您编写了
importedclass
。这是对的吗?我在评论中提出了这一点,OP说
不,这个想法是func自己获取vari
。我认为这是一个很好的解决方案,但它似乎不符合OP的要求。不幸的是,这不是我问题的解决方案。外部类实际上是固定的,我不允许在MainWindow类中更改任何内容。正如我在回答中所述,如果要求每个人都必须知道另一个的实例,那么任何一个不将其实例传递给另一个的解决方案对我来说都是奇迹。但我希望有人能想出一些办法,因为我现在也很好奇这是否可能。