【发布时间】: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 多行代码。有没有什么方法可以让我按照我尝试的方式来掌握类变量?