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
相关产品推荐
相关产品推荐

