[PyQt5] 在使用 QListWidget 时,如何实现点击按钮来获取当前行!
使用widget填充的QListWidget布局方式
遇到的问题:在使用QListWidget上添加按钮,点击按钮如何才能删除当前行?
解决思路:想删除就要先知道点击了哪行的按钮
解决方法:button点击事件中,button = self.sender() 获取按钮对象,QListWidget 的 indexAt 方法 传入 button 的坐标位置,就能获取当前行,详情看示例 ↓
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import *
class Test(QMainWindow):
def __init__(self):
super().__init__()
self.iniUi()
def iniUi(self):
self.setWindowTitle("测试自定义Item")
self.resize(300,300)
#新建一个QListWidget
self.listwidget = QListWidget(self)
self.listwidget.move(5,5)
self.listwidget.resize(self.width()-10,self.height()-10)
#添加测试案例
for item in range(11):
#新建个按钮
btn = QPushButton("测试按钮{0}".format(item))
btn.clicked.connect(self.ClickBtn) #连接点击槽
#新建个Item
item = QListWidgetItem()
#将item添加到list
self.listwidget.addItem(item)
#将widget添加到item
self.listwidget.setItemWidget(item,btn)
def ClickBtn(self):
#获取button
button = self.sender()
#获取按钮相对于listwwdget的坐标
#listwidget 相对于窗体的坐标 减去 button 相对于窗体的坐标
buttonpos = button.mapToGlobal(QPoint(0,0)) - self.listwidget.mapToGlobal(QPoint(0,0))
#获取到对象
item = self.listwidget.indexAt(buttonpos)
print(item)
#获取位置
print(item.row())
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Test()
window.show()
sys.exit(app.exec_())
本作品采用《CC 协议》,转载必须注明作者和本文链接