使局部变量成为全局变量



我的问题将分两部分使用。py:main.py:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from tag_pivot import *
from mainWindow import Ui_MainWindow
import sys
a = 'tag_'
b = 'pivot_'
c = 'STP_'
d = '_'
e = 'MTD_Level'
f = '()'
g = a+b+c+d+e+f
print(g)

class MainApp(QMainWindow, Ui_MainWindow):

def slot_method(self):
combo = self.comboBox.currentText()//combo is local variable as it is from self the GUI
combo2 = self.comboBox_2.currentText()
eval(a + b + combo + d + combo2 + f)

def __init__(self):
super(MainApp, self).__init__()
self.setupUi(self)
self.init_connections()

def init_connections(self):
self.pushButton.clicked.connect(self.slot_method)

def main():
app = QApplication(sys.argv)
ex = MainApp()
ex.show()
sys.exit(app.exec_())

if __name__ == '__main__':
main()

mainWindow.py:

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(100, 160, 111, 51))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(410, 152, 151, 51))
self.pushButton.setObjectName("pushButton")
self.comboBox_2 = QtWidgets.QComboBox(self.centralwidget)
self.comboBox_2.setGeometry(QtCore.QRect(88, 281, 151, 71))
self.comboBox_2.setObjectName("comboBox_2")
self.comboBox_2.addItem("")
self.comboBox_2.addItem("")
self.comboBox_2.addItem("")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.comboBox.setItemText(0, _translate("MainWindow", "STP_"))
self.comboBox.setItemText(1, _translate("MainWindow", "MM_"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.comboBox_2.setItemText(0, _translate("MainWindow", "Intra_Level"))
self.comboBox_2.setItemText(1, _translate("MainWindow", "MTD_Level"))
self.comboBox_2.setItemText(2, _translate("MainWindow", "YTD_Level"))
if __name__ == "__main__":

app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

我的问题是,我是否可以将combo(来自self.comboBox.currentText(((从局部变量转换为全局变量,因为我想将作为字符串的combo分配给MainAPP类之外的其他函数。我不知道如何做到这一点,我想其他人可能也有同样的问题,所以我把它发布在这里。如果我尝试在main((中使用ex.combo:

def main():
app = QApplication(sys.argv)
ex = MainApp()
gg = ex.combo
ex.show()
sys.exit(app.exec_())

系统告诉我:

Traceback (most recent call last):
File "C:/Users/Michael Su/Desktop/Michael_python/Tag_pivot/main.py", line 86, in <module>
main()
File "C:/Users/Michael Su/Desktop/Michael_python/Tag_pivot/main.py", line 80, in main
gg = ex.combo
AttributeError: 'MainApp' object has no attribute 'combo'
Process finished with exit code 1

虽然我不确定为什么函数的tag_pivot部分是必要的,但如果您只想打印特定的值,为什么不直接从main打印它们,而不是从long-eval语句和不同的函数打印呢?

print(f"{c}{e}")  # prints STP_MTD

或者,如果你喜欢一个功能,特别是打印:

def printer_function(*args):
print("".join(args))

然后可以从main调用此函数,并为您提供要打印在一起的任何变量。例如

printer_function(c, e)  # prints STP_MTD

我希望这能有所帮助,但如果打印不是你想的唯一功能,请告诉我。

最新更新