我想要使用globar设置txt为全局变量,但是没有成功。为什么?

我想要使用globar设置txt为全局变量,但是没有成功。为什么?
代码如下:


```python
import sys

import PySide2.QtWidgets
from ui_window import Ui_MainWindow


class W(PySide2.QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.show()
        self.ui.pb_zz.clicked.connect(self.xg)
        self.ui.pb_bc.clicked.connect(self.bc)

    def xg(self):
        self.ui.lb_xg.setText("")

    def bc(self):
        global txt  #问题在这里
        txt = self.ui.le_rm.text()


print(txt)

if __name__ == "__main__":
    app = PySide2.QtWidgets.QApplication(sys.argv)
    window = W()
    sys.exit(app.exec_())


该回答引用GPTᴼᴾᴱᴺᴬᴵ,具体如下:
在 Python 中,使用 global 关键字可以将一个变量声明为全局变量,这个变量的作用域将扩展到整个模块,包括函数内部和外部。但是,全局变量需要在定义之后才能使用。

在你的代码中,print(txt) 是在类定义外部定义的,也就是在 W 类被实例化之前执行的。此时,global txt 还没有被执行,因此 txt 变量不存在,会引发 NameError 异常。

如果你想在类定义外部访问全局变量,需要确保 global 声明和变量的赋值都在之前执行。你可以将 global 声明放在模块的顶层代码中,将变量的赋值放在函数内部,例如:

import sys
import PySide2.QtWidgets
from ui_window import Ui_MainWindow

txt = ""  # 全局变量

class W(PySide2.QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.show()
        self.ui.pb_zz.clicked.connect(self.xg)
        self.ui.pb_bc.clicked.connect(self.bc)

    def xg(self):
        self.ui.lb_xg.setText("")

    def bc(self):
        global txt
        txt = self.ui.le_rm.text()

if __name__ == "__main__":
    print(txt)  # 输出空字符串
    app = PySide2.QtWidgets.QApplication(sys.argv)
    window = W()
    sys.exit(app.exec_())

print(txt)  # 输出全局变量的值


这里我们将 txt 定义为一个全局变量,并在 W 类中使用 global 声明。在 bc 方法中,我们修改了全局变量 txt 的值。在 main 中,我们可以输出 txt 变量的值,此时它是一个空字符串。在类实例化之后,txt 变量的值被修改为用户输入的值,之后的代码可以使用 txt 的值。在类定义之后的代码中,我们也可以访问 txt 变量的值。


如果以上回答对您有所帮助,望采纳~谢谢