使用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_())