pyhton QListWidget
时间: 2025-01-01 09:33:30 浏览: 9
### 关于 Python 中 QListWidget 的使用
#### 导入必要的模块
为了能够使用 `QListWidget` 及其关联组件,需先导入相应的库。这包括用于创建应用程序实例、窗口布局以及特定的小部件。
```python
from PyQt5.QtWidgets import (
QListWidget,
QListWidgetItem,
QApplication,
QVBoxLayout,
QWidget,
QLabel
)
import sys
```
#### 创建基本的应用程序框架并初始化界面
构建一个简单的 GUI 应用来展示 `QListWidget` 的功能。这里定义了一个主窗口类 `_MainWindow` 继承自 `QWidget` 并设置了垂直布局来容纳列表控件和其他可能的子控件。
```python
class _MainWindow(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
self.setLayout(layout)
label = QLabel("This is a demo of QListWidget.")
layout.addWidget(label)
self.list_widget = QListWidget()
layout.addWidget(self.list_widget)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = _MainWindow()
window.show()
sys.exit(app.exec_())
```
#### 添加项至 QListWidget 和处理选择事件
向 `QListWidget` 插入条目可以通过调用 `addItem()` 方法实现;对于更复杂的场景,则可考虑使用 `setItemWidget()` 设置自定义 widget 显示样式[^1]。当用户点击某个项目时会触发内置信号如 `itemClicked`, 这允许开发者编写响应逻辑。
```python
def add_items_to_listwidget(list_widget: QListWidget):
items = ["Item 1", "Item 2", "Item 3"]
for i in range(len(items)):
item = QListWidgetItem(items[i])
list_widget.addItem(item)
def handle_item_click(item: QListWidgetItem):
print(f'You clicked on {item.text()}')
window.list_widget.itemClicked.connect(handle_item_click)
add_items_to_listwidget(window.list_widget)
```
#### 自定义行高以适应不同类型的 Widget
有时默认的高度不足以良好呈现内容,在这种情况下可通过给定的数据角色 (`SizeHintRole`) 对每行列进行个性化调整[^3]:
```python
for index in range(window.list_widget.count()):
item = window.list_widget.item(index)
item.setSizeHint(QSize(100, 60))
```
#### 实现多选模式下的交互操作
通过设置属性 `setSelectionMode()` 改变选择行为(单选/多选),配合复选框或其他输入元件完成复杂的选择机制[^4]。下面的例子展示了如何监听复选框的状态变化,并收集所有已勾选项的信息。
```python
list_widget.setSelectionMode(QAbstractItemView.MultiSelection)
checkboxes = []
for text in ("Option A", "Option B"):
checkbox = QCheckBox(text)
checkboxes.append(checkbox)
listItem = QListWidgetItem()
window.list_widget.setItemWidget(listItem, checkbox)
def collect_checked_options():
checked_opts = [cb.text() for cb in checkboxes if cb.isChecked()]
print('Checked options:', ', '.join(checked_opts))
# Connect the stateChanged signal to our handler function.
for chkbox in checkboxes:
chkbox.stateChanged.connect(collect_checked_options)
```
阅读全文