无法访问类变量python

问题描述 投票:0回答:1

我正在使用python构建桌面应用程序,但在获取我设置的类变量时遇到了一些问题。

我的程序是这样构建的:

CharCreator.py

class MainWindow(QtWidgets.QMainWindow):
    charName = ""

    def __init__(self):
        super().__init__()

    def editCharClick(self):
        from CharEdit import editUi

        MainWindow.charName = self.getSelected()
        print(MainWindow.charName)
        if(MainWindow.charName is not None):
            self.editWin = editUi()
            self.editWin.show()
        else:
            print("charName is none")


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


if __name__ == "__main__":
    main()

所以我有一个主窗口类,一个charName类变量。然后,我有了典型的方法(init,main等),并有一个editCharClick方法,该方法采用表的选定行,获取所需单元格的名称,并将其字符串内容分配给类变量。这部分在我的CharCreator.py文件中效果很好。

问题出在我的第二个文件中。如我的editCharClick方法所示,它将打开第二个窗口(CharEdit.py文件)。那是我需要获取MainWindow.charName类变量的地方。

CharEdit.py

class editUi(QtWidgets.QMainWindow):    
    def __init__(self):
        super(editUi, self).__init__()
        uic.loadUi("./ui/new.ui", self)

        from CharCreator import MainWindow
        print(MainWindow.charName)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    newwindow = editUi()
    sys.exit(app.exec_())

我简化了这个文件只是为了使我的类变量正确,但似乎无法实现。

任何帮助,谢谢。

python class variables
1个回答
0
投票

我尝试更改代码以与事件/信号一起使用,但不太喜欢。因此,我只是走了简单的路,更改了editUi类构造函数,使其可以接受另一个参数。然后,在MainWindow.editCharClick()中创建editUi对象时,可以将editUi对象中的变量作为参数传递。

CharCreator.py

class MainWindow(QtWidgets.QMainWindow):
    charName = ""

    def __init__(self):
        super().__init__()

    def editCharClick(self):
        from CharEdit import editUi

        MainWindow.charName = self.getSelected()
        print(MainWindow.charName)
        if(MainWindow.charName is not None):
            self.editWin = editUi(MainWindow.charName)
            self.editWin.show()
        else:
            print("charName is none")


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


if __name__ == "__main__":
    main()

CharEdit.py

class editUi(QtWidgets.QMainWindow):    
    def __init__(self, ch):
        super(editUi, self).__init__()
        uic.loadUi("./ui/new.ui", self)

        from CharCreator import MainWindow
        print(ch)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    newwindow = editUi()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.