day05——QComboBox(下拉选择框)与 QListWidget(列表控件)
今天我们重点学习 列表选择类控件,它们常用于表单、选项配置界面中。
一、QComboBox(下拉选择框)
1. 概念
QComboBox 是一个下拉选择框,用户可以从多个选项中选择一个。
常见场景:选择省份、语言、主题样式等等。
特点:
-
可以动态添加和删除选项。
-
可以设置默认选项。
-
支持信号槽,用来捕获选项切换事件。
2. 常见方法
-
addItem("文本"):添加一个选项。 -
addItems(["a", "b", "c"]):批量添加选项。 -
currentText():获取当前选中的文本。 -
setCurrentIndex(i):设置选中第 i 项。 -
信号
currentIndexChanged:当用户选择不同选项时触发。
3. 示例代码
from PyQt6.QtWidgets import QApplication, QLabel, QComboBox, QVBoxLayout,QWidget
import sys
# 创建下拉选项显示类
class ComBoBox(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("day05 - 下拉选项示例")
self.resize(300,200)
layout = QVBoxLayout()
self.label = QLabel("选择一个城市", self)
layout.addWidget(self.label)
# 创建下拉选项
self.combo_box = QComboBox()
self.combo_box.addItems(["北京", "上海", "广州", "武汉"])
layout.addWidget(self.combo_box)
self.combo_box.activated.connect(self.select_changed)
self.setLayout(layout)
def select_changed(self, index):
text = self.combo_box.currentText()
self.label.setText(f"你选择了{text}")
if __name__ == "__main__":
app = QApplication(sys.argv)
demo = ComBoBox()
demo.show()
sys.exit(app.exec())
运行效果:选择不同城市,标签会更新。注意:这里使用了activated 而不是currentIndexChanged,是因为如果出现默认选项就是你的选择时,currentIndexChanged无法触发信号槽

二、QListWidget(列表控件)
1. 概念
QListWidget 是一个列表视图控件,可以显示多行文字,支持选择、编辑、删除。
常见场景:联系人列表、文件浏览、菜单选择。
2. 常见方法
-
addItem("文本"):添加单项。 -
addItems(["a", "b", "c"]):批量添加多项。 -
currentItem():获取当前选中项。 -
takeItem(row):移除指定行的项目。 -
信号
itemClicked:点击某一项时触发。
3. 示例代码
import sys
from PyQt6.QtWidgets import QApplication, QLabel, QVBoxLayout, QListWidget, QWidget
class ListBox(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("day05 - ListBox 示例")
# 创建label,显示信息
self.label = QLabel("请选择一种水果", self)
# 创建垂直界面管理器
layout = QVBoxLayout()
layout.addWidget(self.label)
# 创建ListBox
self.list_box = QListWidget(self)
self.list_box.addItems(["苹果", "香蕉", "葡萄", "橘子", "桃子", "李子", "火龙果"])
layout.addWidget(self.list_box)
# 添加信号槽
self.list_box.itemClicked.connect(self.item_clicked)
self.setLayout(layout)
def item_clicked(self, item):
self.label.setText(f"你选择了{item.text()}")
if __name__ == "__main__":
app = QApplication(sys.argv)
demo = ListBox()
demo.show()
sys.exit(app.exec())
运行效果:点击某个水果,标签更新。

三、综合小练习
做一个简单的“省份 + 城市选择器”:
-
上面一个
QComboBox,选择省份。 -
下面一个
QListWidget,动态显示该省份的城市。 -
点击城市时,标签显示完整选择(例如 “你选择了:广东 - 广州”)。
今天的知识点:
-
下拉选择框
QComboBox的基本用法。 -
列表控件
QListWidget的基本用法。 -
信号槽在选择类控件中的应用。
小练习代码:
import sys
from PyQt6.QtWidgets import QApplication, QLabel, QVBoxLayout, QComboBox, QListWidget, QWidget
class CitySelector(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("day05 - 省份 + 城市选择器")
# 创建label
self.label = QLabel("请选择你的城市", self)
# 创建垂直界面管理器
layout = QVBoxLayout()
layout.addWidget(self.label)
# 创建省份选择器
self.combo = QComboBox(self)
self.combo.addItems(["陕西","山西","湖北","湖南"])
layout.addWidget(self.combo)
# 创建城市选择框
self.city = QListWidget(self)
layout.addWidget(self.city)
# 省份添加信号槽
self.combo.activated.connect(self.update_city_list)
self.city.itemClicked.connect(self.display_result)
self.setLayout(layout)
self.update_city_list()
def update_city_list(self):
self.selected_province = self.combo.currentText()
if self.selected_province == "山西":
self.city.clear()
self.city.addItems(["太原","运城","临汾","大同","晋中","平遥","临沂"])
elif self.selected_province == "陕西":
self.city.clear()
self.city.addItems(["西安","宝鸡","渭南","榆次"])
elif self.selected_province == "湖北":
self.city.clear()
self.city.addItems(["武汉","咸宁","十堰","黄石","宜昌","恩施","大冶","罗田"])
elif self.selected_province == "湖南":
self.city.clear()
self.city.addItems(["长沙","岳阳","怀化","邵阳"])
else:
self.city.clear()
def display_result(self, item):
self.select_city = item.text()
self.label.setText(f"你选择了{self.selected_province}省——{self.select_city}市")
if __name__ == "__main__":
app = QApplication(sys.argv)
demo = CitySelector()
demo.show()
sys.exit(app.exec())
执行效果:

您的资助是我最大的动力!
金额随意,欢迎来赏!

浙公网安备 33010602011771号