Python中自定义槽函数,采用了global设置全局变量,未能成功修改全局变量的值,请解惑。

问题遇到的现象和发生背景

编程思路是采用浏览窗口选择Word模版文件,获取文件绝对路径并赋值给全局变量,供后续程序调用,但并未成功。

问题相关代码,请勿粘贴截图

-- coding: utf-8 --

Form implementation generated from reading ui file 'bridge.ui'

Created by: PyQt5 UI code generator 5.15.4

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
from PyQt5.QtCore import QSettings
import os.path

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
# 创建主窗口
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 400)
MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint) # 不允许调整窗口大小
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")

    #  创建标签1,模版位置
    self.label_1 = QtWidgets.QLabel(self.centralwidget)
    self.label_1.setGeometry(QtCore.QRect(10, 20, 61, 25))
    self.label_1.setObjectName("label_1")
    #  创建单行文本框,用来显示选择的文件
    self.lineEdit_1 = QtWidgets.QLineEdit(self.centralwidget)
    self.lineEdit_1.setGeometry(QtCore.QRect(90, 20, 550, 25))
    self.lineEdit_1.setObjectName("lineEdit_1")
    #  创建按钮1,选择Word模版文件
    self.pushButton_1 = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_1.setGeometry(QtCore.QRect(670, 20, 90, 25))
    self.pushButton_1.setObjectName("pushButton_1")
    MainWindow.setCentralWidget(self.centralwidget)

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)


    # 为按钮clicked信号绑定槽函数
    self.pushButton_1.clicked.connect(self.bindList_1)
   
#  定义按钮1槽函数
mbmc='模版名称'
def bindList_1(self):
    from PyQt5.QtWidgets import QFileDialog
    filename ,filetype= QFileDialog.getOpenFileName(None, '选择文件','C:/Users/LXF/Desktop/临时文件', 'Word文件(*.docx)')
    if len(filename) > 0:
        self.lineEdit_1.setText(filename)  # 将选择的文件显示在列表中
        global mbmc
        mbmc= filename
        print(mbmc)
print(mbmc)



#  设置各控件的默认名称
def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "生成桥梁工点报告"))
    self.pushButton_1.setText(_translate("MainWindow", "浏览"))
    self.label_1.setText(_translate("MainWindow", "模版位置:"))
    

程序入口,程序从此处启动PyQt设计的窗体

if name == 'main':
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
ui = Ui_MainWindow() # 创建PyQt5设计的窗体对象
ui.setupUi(MainWindow) # 调用PyQt5窗体的方法对窗体对象进行初始化设置
MainWindow.show() # 显示窗体
sys.exit(app.exec_()) # 程序关闭时退出进程

运行结果及报错内容

C:\Anaconda3\python.exe F:/pythonProject/GLProject/test.py
模版名称
C:/Users/LXF/Desktop/临时文件/合同模板.docx

进程已结束,退出代码0

我的解答思路和尝试过的方法

我想要达到的结果

通过调用槽函数修改全局变量“mbmc”的值,以便后续程序调用。

直接用类属性取代全局变量就行了

你mbmc='模版名称' 是写在class Ui_MainWindow(object):类里面的, 不是全局变量
mbmc='模版名称' 要写在class Ui_MainWindow(object):类之外, 才是全局变量

你题目的解答代码如下:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QSettings
import os.path

mbmc='模版名称' #要写在class Ui_MainWindow(object):类之外, 才是全局变量
print(mbmc)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        # 创建主窗口
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 400)
        MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint) # 不允许调整窗口大小
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        #  创建标签1,模版位置
        self.label_1 = QtWidgets.QLabel(self.centralwidget)
        self.label_1.setGeometry(QtCore.QRect(10, 20, 61, 25))
        self.label_1.setObjectName("label_1")
        #  创建单行文本框,用来显示选择的文件
        self.lineEdit_1 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_1.setGeometry(QtCore.QRect(90, 20, 550, 25))
        self.lineEdit_1.setObjectName("lineEdit_1")
        #  创建按钮1,选择Word模版文件
        self.pushButton_1 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_1.setGeometry(QtCore.QRect(670, 20, 90, 25))
        self.pushButton_1.setObjectName("pushButton_1")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


        # 为按钮clicked信号绑定槽函数
        self.pushButton_1.clicked.connect(self.bindList_1)

    #  定义按钮1槽函数
    def bindList_1(self):
        from PyQt5.QtWidgets import QFileDialog
        filename ,filetype= QFileDialog.getOpenFileName(None, '选择文件','C:/Users/LXF/Desktop/临时文件', 'Word文件(*.docx)')
        if len(filename) > 0:
            self.lineEdit_1.setText(filename)  # 将选择的文件显示在列表中
            global mbmc
            mbmc= filename
            print(mbmc)


    #  设置各控件的默认名称
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "生成桥梁工点报告"))
        self.pushButton_1.setText(_translate("MainWindow", "浏览"))
        self.label_1.setText(_translate("MainWindow", "模版位置:"))

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

代码复制的太乱了,汗,试了试,可以正常使用槽函数修改全局变量
题主确定下这个条件是否正常吧

img

在类外面也声明一下global