上节聊了聊下拉列表QComboBox(),并创建了一个下拉列表及相关数据联动,这节来聊聊下拉列表QComboBox()的信号及信号的返回值;像下面这个下拉列表,他的触发信号是在用户点击并选择数据后,在数据改变时触发的,一般常用的有二个信号: 当前文本发生改变时,信号触发时会返回一个当前的字符串,即当前的文本,比如当前是河北——选择河南后,触发currentTextChange()信号,并返回字符串 “河南”。 信号会把返回值传递给,信号连接的——槽函数,举例如下:self.combo.currentTextChange.connect( self.change )上面的信号连接了一个名字叫 change 的槽函数,下面来定义这个槽函数;上面这个槽函数功能就是打印接收到的参数data,这个data就是信号返回的列表框的当前文本,打印出来就是选中的数据,大家可以自己试试打印下,可以更好的理解信号的返回值。 当前索引值发生改变时,信号触发时会返回当前文本所在列表的位置索引,比如当前是河北——选择河南后,触发currentTextChange()信号,并返回 “河南”的索引值为 0 ;data = {"河南":“郑州”, "河北":“石家庄”, "湖南":“长沙”,......}self.list_1 = data.keys() ( 即 ["河南", "河北", "湖南", ...] )self.list_2 = data.values()( 即 ["郑州", "石家庄", "长沙", ...] )# 先创建一个下拉列表self.combo = QComboBOX()# 创建下拉列表后先连接信号再添加数据self.combo.currentIndexChange(self.change)# 向下拉列表中添加数据self.combo.addItems(list_1)
1)因为软件启动时,下拉列表为空——连接信号——添加数据———文本有空变为有——触发信号——联动设置后面省会郑州;2)如果先添加数据——再连接信号,软件启动时,第一个省河南对应的省会没有数据——郑州;大家一定要自己动手试试,先连接信号 跟 先添加数据,看看有什么不同,自己想明白了很简单,以后遇到同样的问题可以举一反三;def change(self, index): sheng_hui = list(self.data.values()) # 上面 self.data.values()就是列表 ["郑州", "石家庄", "长沙", ...] # 索引值index 二个列表是对应的,河南 与郑州都是0 # sheng_hui[index]就是省对应的省会了 # 把上面的省会设置到输入框内就行了 self.line.setText(sheng_hui[index])
就是用户每选择一次数据且数据变化一次,上面槽函数就执行一次,把对应的省会设置到输入框内展示出来;其实就是这么简单。