Python 使局部变量成为全局变量

Python 使局部变量成为全局变量,python,Python,我的问题将用于两个部分。py: main.py: 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 p

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

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

警察告诉我:

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
回溯(最近一次呼叫最后一次):
文件“C:/Users/Michael Su/Desktop/Michael_python/Tag_pivot/main.py”,第86行,在
main()
文件“C:/Users/Michael Su/Desktop/Michael_python/Tag_pivot/main.py”,第80行,在main中
gg=前组合
AttributeError:“MainApp”对象没有属性“combo”
进程已完成,退出代码为1

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

print(f"{c}{e}")  # prints STP_MTD
或者,如果您喜欢某个功能,特别是用于打印:

def printer_function(*args):
    print("".join(args))
然后,可以从main调用此函数,并给定要一起打印的任何变量。e、 g

printer_function(c, e)  # prints STP_MTD

我希望这会有所帮助,但如果打印不是您考虑的唯一函数,请让我知道。

这不是关于打印函数,而是关于如何使self.comboBox.currentText()局部变量只能在MainApp()类中使用,以使其成为全局变量,所以您想使comboBox.currentText()文本在其他地方可访问吗?如果是这样,可以通过访问ex.combo或ex.combo2在main()中使用它。抱歉,如果我没有正确理解。似乎无法将MainAPP.comboBox.currentText()作为全局变量…不是全局变量,不,但您可以在任何需要的地方调用它,方法是调用ex.comboBox.currentText(),因为ex是类MainAPP的对象,您在函数main()中实例化了该类
def printer_function(*args):
    print("".join(args))
printer_function(c, e)  # prints STP_MTD