[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_())

【PyQt5】在使用QListWidget时,如何实现点击按钮来获取当前行?

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!