描述,第一个下拉菜单代表省,选择后控制第二个城市的下拉菜单,每个城市有相应编码,打印选中的城市编码:
代码如下:
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_())
要点:
- 信号连接放在前面,对控件添加数据放后面,这样向控件添加数据也能触发信号连接的函数
- 当清空菜单也会触发信号函数时,可以在执行清空菜单前禁用信号,执行完再恢复信号连接。