QListWidget

      在〈QListWidget〉中尚無留言

QListWidget

QListWidget的長像如下, 可以容納許多的列表, 甚致是 CheckBox. 在此假設QListWidget的物件變數為listWidget

qlistwidget

加入checkbox

QListWidget裏面的列表, 稱為QListWidgetItem. 也就是說, 只有QListWidgetItem才可以加入QListWidget.

所以QCheckBox必需加入QListWidgetItem, 而不是直接加入QListWidget.

def insert(self, links):
    for key in links:
        box=QCheckBox(links[key])#產生一個QCheckBox
        item=QListWidgetItem()#產生QListWidgetItem
        self.listWidget.addItem(item)#item加入QListWidget
        self.listWidget.setItemWidget(item, box)#將QCheckBox加入QListWidgetItem
        print(links[key])

取得核取的選項

首先使用count記錄listWidget裏面共有幾個item.
再將item裏的checkBox取出, 放在boxes的list中.
再足一檢視boxes那些是被核取的, 將核取checkBox的文字放入chks的list中

def btnDownload_click(self):
    count=self.listWidget.count()
    boxs=[self.listWidget.itemWidget(self.listWidget.item(i)) for i in range(count)]
    chks=[]
    for box in boxs:
        if box.isChecked():
            chks.append(box.text())
    print(chks)

實際專案請參照 mp3下載-PyQt5

itemSelectionChanged & itemClicked

itemClicked幾乎是多餘的,因為itemClicked會連帶觸發itemSelectionChanged,但如果是按下鍵盤的上下鍵,只會觸發itemSelectionChanged,所以請全部改用itemSelectionChanged事件。

class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.btnPath.clicked.connect(self.btnPath_click)
#self.listFiles.itemClicked.connect(self.listFiles_click) #多餘的
self.listFiles.itemSelectionChanged.connect(self.listFiles_itemSelectionChanged)
def listFiles_itemSelectionChanged(self):
item=self.listFiles.selectedItems()[0]
txt=self.listFiles.itemWidget(item).text()
print(txt)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *