天天看点

PyQt5 下拉列表控件案例代码

描述,第一个下拉菜单代表省,选择后控制第二个城市的下拉菜单,每个城市有相应编码,打印选中的城市编码:

代码如下:

from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QComboBox 综合案例")
        self.resize(500, 500)
        self.connected = False
        self.city_dic = {
            "北京":{
                "东城":"001",
                "西城":"002",
                "朝阳":"003",
                "丰台":"004"
            },
            "上海": {
                "黄埔": "005",
                "徐汇": "006",
                "长宁": "007",
                "静安": "008",
                "松江": "009"
            },
            "广东": {
                "广州": "010",
                "深圳": "011",
                "湛江": "012",
                "佛山": "013"
            }
        }
        self.setup_ui()

    def set_city(self,pro):
        self.city.blockSignals(True)
        self.city.clear()
        self.city.blockSignals(False)
        for key,value in self.city_dic[pro].items():
            self.city.addItem(key,userData=value)

    def get_citycode(self,x):
        print(self.city.itemData(x))

    def setup_ui(self):
        # 创建两个下拉列表控件
        self.pro = QComboBox(self)
        self.city = QComboBox(self)
        self.city.move(100,0)


        # 监听城市发生改变
        self.city.currentIndexChanged[int].connect(lambda x:self.get_citycode(x))
        # 监听省发生改变
        self.pro.currentTextChanged.connect(self.set_city)

        # 展示数据到第一个下拉框中
        self.pro.addItems(self.city_dic.keys())


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)

    window = Window()
    window.show()
    sys.exit(app.exec_())

           

要点:

  1. 信号连接放在前面,对控件添加数据放后面,这样向控件添加数据也能触发信号连接的函数
  2. 当清空菜单也会触发信号函数时,可以在执行清空菜单前禁用信号,执行完再恢复信号连接。

继续阅读