Python 如何更改一个类中的变量并将其导入另一个文件?
我正在制作一个GUI,有一个包含多个文件的代码,并使用一个控制器文件在文件之间切换。但是,我需要几个变量在其他文件中可用,并且还需要一个自己的文件,以便跟踪所有变量的值。 我现在已经实例化了文件顶部的变量,并尝试更改下面类中的值,但是如果我随后导入到另一个文件,它将只给出首先实例化的值(这是公平的,因为我没有调用该类,但这是一个问题)。 请帮忙。 在我看来,有些守则: 从文件第一窗口 导入系统 从PyQt5导入QtCore、QtWidgets、QtGui 级别=2 数量=4 数量=8 类登录(qtwidts.QWidget): switch_window=QtCore.pyqtSignal() 定义初始化(自): qtwidts.QWidget.\uuuuu init\uuuuuuu(self) self.setupUi(self) self.setWindowTitle(“第一个”) def设置UI(自我,第一个窗口): FirstWindow.setObjectName(“第一个”) FirstWindow.setEnabled(True) 第一个窗口。调整大小(675776) setFocusPolicy(QtCore.Qt.TabFocus) layout=qtwidts.QGridLayout() self.spinBoxNUM_ICE=qtwidts.QSpinBox() self.spinBoxNUM_CONES=qtwidts.QSpinBox() self.spinBoxLEVELS=qtwidts.QSpinBox() layout.addWidget(self.spinBoxNUM_MASTERS,1,2) layout.addWidget(self.spinBoxNUM_从属,2,2) layout.addWidget(self.spinBoxPRIORITY_级别,11,2) #继续并退出按钮 self.QuitButton=qtwidts.QPushButton(“退出”) self.QContinueButton=QtWidgets.QPushButton(“继续”) #行动 self.QuitButton.clicked.connect(FirstWindow.close) self.QContinueButton.clicked.connect(self.login) def登录(自我): #全球气候变化 self.NUM_ICE=self.spinBoxNUM_ICE.value() 全局NUM_锥 NUM_CONES=self.spinBoxNUM_CONES.value() 全球层面 LEVELS=self.spinBoxLEVELS.value() self.switch_window.emit() 在控制器文件中Python 如何更改一个类中的变量并将其导入另一个文件?,python,class,variables,pyqt5,Python,Class,Variables,Pyqt5,我正在制作一个GUI,有一个包含多个文件的代码,并使用一个控制器文件在文件之间切换。但是,我需要几个变量在其他文件中可用,并且还需要一个自己的文件,以便跟踪所有变量的值。 我现在已经实例化了文件顶部的变量,并尝试更改下面类中的值,但是如果我随后导入到另一个文件,它将只给出首先实例化的值(这是公平的,因为我没有调用该类,但这是一个问题)。 请帮忙。 在我看来,有些守则: 从文件第一窗口 导入系统 从PyQt5导入QtCore、QtWidgets、QtGui 级别=2 数量=4 数量=8 类登录(q
class Controller:
def __init__(self):
pass
def show_login(self):
self.login = Login()
self.login.switch_window.connect(self.show_main)
self.login.show()
def show_main(self):
self.window = MainWindow()
self.window.switch_window.connect(self.show_window_two)
self.login.close()
self.window.show()
在我想要使用级别的主窗口文件中
import sys
from PyQt5 import QtCore, QtWidgets
from firstwindow import LEVELS
class MainWindow(QtWidgets.QWidget):
switch_window = QtCore.pyqtSignal()
#switch_window = QtCore.pyqtSignal(str)
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setupUi(self, LEVELS)
self.setWindowTitle('PriorityMap')
def setupUi(self, PriorityMap, LEVELS):
PriorityMap.setObjectName("First")
PriorityMap.setEnabled(True)
PriorityMap.resize(675,776)
PriorityMap.setFocusPolicy(QtCore.Qt.TabFocus)
layout = QtWidgets.QGridLayout()
#CREATING ELEMENTS
for i in range(0,LEVELS+2):
for j in range(0,5):
if (i==0 and j!=0):
layout.addWidget(QtWidgets.QLabel(str(j-1)),i,j)
elif (j==0 and i!=0):
layout.addWidget(QtWidgets.QLabel("LEVEL"+str(i-1)),i,j)
else:
layout.addWidget(QtWidgets.QPushButton(str(i)+","+str(j)),i,j)
#CONTINUE AND QUIT BUTTON
self.QuitButton = QtWidgets.QPushButton("Quit")
self.QContinueButton = QtWidgets.QPushButton("Continue")
#actions
self.QuitButton.clicked.connect(PriorityMap.close)
self.QContinueButton.clicked.connect(self.switch)
#LAYOUT
layout.addWidget(self.QuitButton,15,1)
layout.addWidget(self.QContinueButton,15,2)
self.setLayout(layout)
def switch(self):
self.switch_window.emit()
避免滥用全局变量(1),在这种情况下没有必要,您必须在show_main方法中进行更改之前动态创建小部件:
类控制器:
def show_登录(自我):
self.login=login()
self.login.switch\u window.connect(self.show\u main)
self.login.show()
def显示主(自):
self.window=mainfown()
levels=self.login.spinBoxLEVELS.value()
self.window.setLevels(级别)
self.window.switch\u window.connect(self.show\u window\u two)
self.login.close()
self.window.show()
class主窗口(qtwidts.QWidget):
switch_window=QtCore.pyqtSignal()
#开关\u窗口=QtCore.pyqtSignal(str)
定义初始化(自):
qtwidts.QWidget.\uuuuu init\uuuuuuu(self)
self.setupUi(self)
self.setWindowTitle('PriorityMap')
def设置UI(自身,优先映射):
PriorityMap.setObjectName(“第一个”)
PriorityMap.setEnabled(True)
PriorityMap.resize(675776)
PriorityMap.setFocusPolicy(QtCore.Qt.TabFocus)
layout=qtwidts.QVBoxLayout(self)
self.m_content_widget=qtwidts.QWidget()
layout.addWidget(self.m_content_widget,stretch=1)
#继续并退出按钮
self.QuitButton=qtwidts.QPushButton(“退出”)
self.QContinueButton=QtWidgets.QPushButton(“继续”)
#行动
self.QuitButton.clicked.connect(PriorityMap.close)
self.QContinueButton.clicked.connect(self.switch)
w=qtwidts.QWidget()
hlay=qtwidts.QHBoxLayout(w)
hlay.addWidget(self.quit按钮)
hlay.addWidget(self.QContinueButton)
layout.addWidget(w,alignment=QtCore.Qt.AlignRight)
def设定液位(自身,液位):
layout=qtwidts.QGridLayout(self.m_content_小部件)
对于范围(0,级别+2)内的i:
对于范围(0,5)内的j:
如果(i==0和j!=0):
layout.addWidget(qtwidts.QLabel(str(j-1)),i,j)
elif(j==0,i!=0):
layout.addWidget(qtwidts.QLabel(“级别”+str(i-1)),i,j)
其他:
layout.addWidget(qtwidts.QPushButton(str(i)+“,“+str(j)),i,j)
def开关(自):
self.switch_window.emit()
(1) 最后做了这件事,效果很好! 在调用login.close之前,实例化了登录窗口中的所有变量。还传入了下一个函数所需的变量。通过这种方式,我还能够创建一个打印参数的函数
class Controller:
def __init__(self):
pass
def show_login(self):
self.login = Login()
self.login.switch_window.connect(self.show_main)
self.login.show()
def show_main(self):
self.LEVELS = self.login.LEVELS
self.window = MainWindow(self.LEVELS)
self.window.switch_window.connect(self.show_window_two)
self.login.close()
self.window.show()
def writetofile(Controller):
f = open("f.txt", "w+")
f.write("int LEVELS = %d;\n\n" %Controller.LEVELS)
f.close()
只是快速浏览一下,也许可以看看抽象类方法?