gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:34:26 25 4
gpt4 key购买 nike

我正在制作一个 GUI,并且有一个包含多个文件的代码,并使用 Controller 文件在文件之间切换。但是,我需要其他文件中可用的多个变量,并且还需要一个自己的文件,我可以在其中跟踪所有变量的值。我现在已经实例化了文件顶部的变量,并尝试更改下面的类中的值,但是如果我然后导入到另一个文件,它只会给出首先实例化的值(这是公平的,因为我没有调用类,但这是一个问题)。请帮忙。在我的一些代码下:

来自文件第一个窗口

import sys
from PyQt5 import QtCore, QtWidgets, QtGui

LEVELS = 2
NUM_ICE = 4
NUM_CONES = 8

class Login(QtWidgets.QWidget):

switch_window = QtCore.pyqtSignal()

def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setupUi(self)
self.setWindowTitle('First')

def setupUi(self, FirstWindow):
FirstWindow.setObjectName("First")
FirstWindow.setEnabled(True)
FirstWindow.resize(675,776)

FirstWindow.setFocusPolicy(QtCore.Qt.TabFocus)

layout = QtWidgets.QGridLayout()

self.spinBoxNUM_ICE = QtWidgets.QSpinBox()
self.spinBoxNUM_CONES = QtWidgets.QSpinBox()
self.spinBoxLEVELS = QtWidgets.QSpinBox()

layout.addWidget(self.spinBoxNUM_MASTERS,1,2)
layout.addWidget(self.spinBoxNUM_SLAVES,2,2)
layout.addWidget(self.spinBoxPRIORITY_LEVELS,11,2)

#CONTINUE AND QUIT BUTTON
self.QuitButton = QtWidgets.QPushButton("Quit")
self.QContinueButton = QtWidgets.QPushButton("Continue")
#actions
self.QuitButton.clicked.connect(FirstWindow.close)
self.QContinueButton.clicked.connect(self.login)

def login(self):
#global NUM_ICE
self.NUM_ICE = self.spinBoxNUM_ICE.value()
global NUM_CONES
NUM_CONES = self.spinBoxNUM_CONES.value()
global LEVELS
LEVELS = self.spinBoxLEVELS.value()

self.switch_window.emit()

并在 Controller 文件中

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 方法中进行更改之前先动态创建小部件:

class Controller:
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()
levels = self.login.spinBoxLEVELS.value()
self.window.setLevels(levels)
self.window.switch_window.connect(self.show_window_two)
self.login.close()
self.window.show()
class MainWindow(QtWidgets.QWidget):
switch_window = QtCore.pyqtSignal()
# switch_window = QtCore.pyqtSignal(str)

def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setupUi(self)
self.setWindowTitle('PriorityMap')

def setupUi(self, PriorityMap):
PriorityMap.setObjectName("First")
PriorityMap.setEnabled(True)
PriorityMap.resize(675,776)

PriorityMap.setFocusPolicy(QtCore.Qt.TabFocus)

layout = QtWidgets.QVBoxLayout(self)
self.m_content_widget = QtWidgets.QWidget()
layout.addWidget(self.m_content_widget, stretch=1)
#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)

w = QtWidgets.QWidget()
hlay = QtWidgets.QHBoxLayout(w)
hlay.addWidget(self.QuitButton)
hlay.addWidget(self.QContinueButton)
layout.addWidget(w, alignment=QtCore.Qt.AlignRight)

def setLevels(self, levels):
layout = QtWidgets.QGridLayout(self.m_content_widget)
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)

def switch(self):
self.switch_window.emit()

(1) Why are global variables evil?

关于python - 如何更改类中的变量并将其导入到另一个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57058059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com