QListWidget
- QListWidget : 列表選擇元件。可以存放字串和其他元件。
QListWidget 添加元件和增加刪除元素到列表。
-
QListWidget(): 創立一個列表。列表裡的元素每個類別都是 QListWidgetItem ,假如今天輸入字串,他也會自己轉成 QListWidgetItem 類別。
-
addItem(str or QListWidgetItem) 和 addItems([str]): 添加元素進列表裡,可以一個一個添加,也可以使用序列增加,但只能是字串序列。下面範例是使用 addItems 添加A和B。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout
class Mywindow(QWidget):
def __init__(self):
super().__init__()
#建立一個列表,並添加A和B
List = QListWidget()
List.addItems(['A','B'])
layout = QVBoxLayout()
layout.addWidget(List)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()

-
insertItem(index,str or QListWidgetItem) 和 insertItems(index,[str]) : 插入元素進列表。要用序列插入要注意只能用字串序列。
-
takeItem(index) : 刪除元素。
下面範例是將apple pie 刪除,並插入一個元素。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout
from PySide6.QtCore import Qt
class Mywindow(QWidget):
def __init__(self):
super().__init__()
QList = QListWidget()
QList.addItems(["apple pie","apple","banana",])
QList.takeItem(0)
QList.insertItem(1,"插入的元素")
#布局
layout = QVBoxLayout()
layout.addWidget(QList)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()

QListWidgetItem 使用
-
QListWidgetItem : 如果想要添加除了字串的元件進去,可以用 addItem(QListWidgetItem)。使用方法以按鈕和標籤舉例。
- 先建立一個
QWidget 放入標籤和按鈕。
- 使用
addItem(QListWidgetItem) 將 QListWidgetItem 添加到列表裡。
- 使用
setSizeHint(QWidget.sizeHint()) 設置 QListWidgetItem 的大小,與 QWidget 大小匹配。
- 使用
setItemWidget(QListWidgetItem,widget) 把建立好的 QWidget 設定到QListWidgetItem 裡面
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout , QListWidgetItem , QPushButton , QHBoxLayout , QLabel
class Add(QWidget):
def __init__(self):
super().__init__()
widget = QHBoxLayout()
label = QLabel("標籤")
btn = QPushButton("按鈕")
widget.addWidget(label)
widget.addWidget(btn)
self.setLayout(widget)
class Mywindow(QWidget):
def __init__(self):
super().__init__()
QList = QListWidget()
Item = QListWidgetItem()
widget = Add()
# 設置QListWidgetItem的大小,匹配自定義小部件
Item.setSizeHint(widget.sizeHint())
QList.addItem(Item)
# 將設置好的QWidget設定給QListWidgetItem
QList.setItemWidget(Item,widget)
layout = QVBoxLayout()
layout.addWidget(QList)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()

QListWidget 查找
-
item(index): 取出指定的元素。
-
findItem(str,flag): 查找元素,有不同的找尋方式,需要使用 Qt.MatchFlag。下面範例是選用 MatchContains 只要包含指定的文字就會列印出來。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout , QListWidgetItem , QPushButton , QHBoxLayout , QLabel
from PySide6.QtCore import Qt
class Mywindow(QWidget):
def __init__(self):
super().__init__()
QList = QListWidget()
QList.addItems(["apple pie","apple","banana",])
#只要包含apple就會列印出來
result = QList.findItems("apple",Qt.MatchFlag.MatchContains)
for i in result:
print(i.text())
layout = QVBoxLayout()
layout.addWidget(QList)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()

QListWidget 常用的信號
-
currentItemChanged.connect(function) : 當選擇改變。
-
itemChanged.connect(function) : 當元素選中狀態改變。可以搭配 setCheckState(Qt.CheckState) 使用,會在新增的那列增加一個勾選框。
下面範例是在 apple pie 前面增加勾選框,當勾選會列印文字,還有選擇改變時會列印文字。
from PySide6.QtWidgets import QApplication , QWidget , QListWidget , QVBoxLayout , QListWidgetItem , QPushButton , QHBoxLayout , QLabel
from PySide6.QtCore import Qt
class Mywindow(QWidget):
def __init__(self):
super().__init__()
QList = QListWidget()
QList.addItems(["apple pie","apple","banana",])
#將apple pie 設定沒選狀態
QList.item(0).setCheckState(Qt.CheckState.Unchecked)
# 選擇狀態改變
QList.currentItemChanged.connect(lambda: print("選擇的元素改變了"))
QList.itemChanged.connect(lambda: print("apple pie 選中狀態改變了"))
#布局
layout = QVBoxLayout()
layout.addWidget(QList)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()
總結
| 功能 |
方法 |
| 創建列表 |
QListWidget() |
| 添加元素(單個) |
addItem(str or QListWidgetItem) |
| 添加元素(多個) |
addItems([str]) |
| 插入元素(單個) |
insertItem(index,str or QListWidgetItem) |
| 插入元素(多個) |
insertItem(index,[str]) |
| 刪除元素 |
takeItem(index) |
- 添加字串的話,會自動轉成 QListWidgetItem 這類別。
- QListWidgetItem 使用
- 先建立一個
QWidget 放入元件。
- 使用
addItem(QListWidgetItem) 將 QListWidgetItem 添加到列表裡。
- 使用
setSizeHint(QWidget.sizeHint()) 設置 QListWidgetItem 的大小,與 QWidget 大小匹配。
- 使用
setItemWidget(QListWidgetItem,widget) 把建立好的 QWidget 設定到QListWidgetItem 裡面
- QListWidget 查找
要配合 Qt.MatchFlag 選擇要的搜索方式。
| 功能 |
方法 |
| 查找 |
findItem(str,flag) |
| 功能 |
方法 |
| 選擇改變 |
currentItemChanged.connect(function) |
| 選中狀態改變 |
itemChanged.connect(function) |