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无法触发信号槽

image


二、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())

运行效果:点击某个水果,标签更新。

image


三、综合小练习

做一个简单的“省份 + 城市选择器”:

  • 上面一个 QComboBox,选择省份。

  • 下面一个 QListWidget,动态显示该省份的城市。

  • 点击城市时,标签显示完整选择(例如 “你选择了:广东 - 广州”)。


今天的知识点:

  1. 下拉选择框 QComboBox 的基本用法。

  2. 列表控件 QListWidget 的基本用法。

  3. 信号槽在选择类控件中的应用。


小练习代码:

  

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())

执行效果:

image

posted @ 2025-09-10 16:40  毛豆*_*  阅读(130)  评论(0)    收藏  举报