天天看點

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. 當清空菜單也會觸發信号函數時,可以在執行清空菜單前禁用信号,執行完再恢複信号連接配接。

繼續閱讀