You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide2中点击按钮向QListWidget添加项报错:NameError解决咨询

Fixing "NameError: name 'listwidget' is not defined" in Your Qt Merge Method

这个问题其实很好解决——你在类的初始化代码里创建的listwidget是个局部变量,而merge作为类的成员方法,根本看不到这个局部变量,所以才会抛出NameError。

只需要把listwidget改成类的实例属性,也就是给它加上self.前缀,让整个类的方法都能通过self访问到它就行。

修改后的完整代码示例:

# 假设这是你的类的初始化方法(比如__init__)里的代码
def __init__(self):
    # 其他初始化代码...
    self.listwidget = QtWidgets.QListWidget()  # 这里加上self.
    for a in range(0,3):
        self.listwidget.addItem(str(a))  # 这里也改成self.listwidget
    button_layout = QHBoxLayout()
    self.buttfind = QPushButton('Find')
    self.buttfind.clicked.connect(self.find)
    self.buttmerge = QPushButton('Merge')
    self.buttmerge.clicked.connect(self.merge)
    button_layout.addWidget(self.buttfind)
    button_layout.addWidget(self.buttmerge)
    main_layout.addWidget(self.listwidget)  # 这里同样修改
    main_layout.addLayout(button_layout)
    self.setLayout(main_layout)

def merge(self):
    print('a')
    self.listwidget.addItem(str('asd'))  # 这里改成self.listwidget

简单说下原理:在Python类中,用self.xxx定义的变量是实例的属性,属于整个实例对象,类里的所有成员方法都能通过self来访问它;而没有self.的变量只是当前函数里的局部变量,出了这个函数就找不到了。

在Qt开发中,把UI控件设置为实例属性是常规操作,后续你要获取列表选中项、清空列表内容这些操作,都能很方便地通过self.listwidget来完成~

内容的提问来源于stack exchange,提问作者ForteD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:07:42