描述,第一個下拉菜單代表省,選擇後控制第二個城市的下拉菜單,每個城市有相應編碼,列印選中的城市編碼:
代碼如下:
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_())
要點:
- 信号連接配接放在前面,對控件添加資料放後面,這樣向控件添加資料也能觸發信号連接配接的函數
- 當清空菜單也會觸發信号函數時,可以在執行清空菜單前禁用信号,執行完再恢複信号連接配接。