paint.exe 2023-03-15 20:56 采纳率: 75%
浏览 25
已结题

我想要使用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_())


  • 写回答

1条回答 默认 最新

  • Leodong. 2023-03-15 21:09
    关注

    该回答引用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 变量的值。


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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月24日
  • 已采纳回答 3月16日
  • 创建了问题 3月15日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效