Python 如何更改一个类中的变量并将其导入另一个文件?

Python 如何更改一个类中的变量并将其导入另一个文件?,python,class,variables,pyqt5,Python,Class,Variables,Pyqt5,我正在制作一个GUI,有一个包含多个文件的代码,并使用一个控制器文件在文件之间切换。但是,我需要几个变量在其他文件中可用,并且还需要一个自己的文件,以便跟踪所有变量的值。 我现在已经实例化了文件顶部的变量,并尝试更改下面类中的值,但是如果我随后导入到另一个文件,它将只给出首先实例化的值(这是公平的,因为我没有调用该类,但这是一个问题)。 请帮忙。 在我看来,有些守则: 从文件第一窗口 导入系统 从PyQt5导入QtCore、QtWidgets、QtGui 级别=2 数量=4 数量=8 类登录(q

我正在制作一个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() 在控制器文件中

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

只是快速浏览一下,也许可以看看抽象类方法?