我想要使用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 变量的值。
如果以上回答对您有所帮助,望采纳~谢谢