【问题标题】:can't access class variable python无法访问类变量python
【发布时间】:2020-05-31 10:51:59
【问题描述】:

我正在使用 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_())

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

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 请解释您为什么使用类属性?不应该是实例属性吗?
  • 因为当我创建主窗口的实例时,会弹出一个新的主窗口,我不喜欢这种行为。
  • 通常你创建一个主窗口。
  • 谢谢,如果您认为这可以解决问题,我会调查一下。不过我宁愿避免它,因为我必须重构 2 个不同的文件,其中一个有 8000 多行代码。有没有什么方法可以让我按照我尝试的方式来掌握类变量?

标签: python class variables


【解决方案1】:

我尝试更改我的代码以使用事件/信号,但不太喜欢它。 所以我只是简单地改变了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_())

【讨论】:

    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 2021-05-20
    • 2018-10-17
    • 2015-12-07
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多