【PyQt5】在使用 QListWidget 時,如何實現點選按鈕來獲取當前行!

rockrabbit發表於2019-10-27

使用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()
        #獲取到物件
        item = self.listwidget.indexAt(button.pos())
        print(item)
        #獲取位置
        print(item.row())

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Test()
    window.show()
    sys.exit(app.exec_())

【PyQt5】在使用QListWidget時,如何實現點選按鈕來獲取當前行?

相關文章