用 eric6 与 PyQt5 实现python的极速GUI编程(系列02)---- 省市县(区)下拉列表多级联动...
【概览】
本文实现如下的程序:
主要步骤如下:
1、在eric6中新建项目,新建窗体
2、(自动打开)进入PyQt5 Desinger,编辑图形界面,保存
3、回到eric 6,对上一步得到的界面文件 union.ui 文件右击,编译窗体,得到 Ui_union.py 文件
4、然后再对 union.ui 文件右击,生成对话框代码,得到 union.py 文件。(在union.py中添加自己的程序逻辑)
5、py2exe打包成exe文件(此步略)
【正文】
接【概览】第4步,生成对话框代码时勾选(一共四个):
on_comboBox_province_activated(int)
on_comboBox_city_activated(int)
on_comboBox_town_activated(int)
on_pushButton_ok_clicked()
接下来,为了在 union.py 中实现联动逻辑,先得准备省市县数据,保存在一个area.py中:
然后在 union.py 中导入数据(area.py):
import area
并修改 union.py ,完整代码如下:
# -*- coding: utf-8 -*- """ Module implementing Logic. """ import sys from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QDialog, QApplication from Ui_union import Ui_Dialog import area class Logic(QDialog, Ui_Dialog): """ Class documentation goes here. """ def __init__(self, parent=None): """ Constructor @param parent reference to the parent widget (QWidget) """ super(Logic, self).__init__(parent) self.setupUi(self) self.setWindowTitle('Pyqt ComboBox') self.dictProvince = area.dictProvince self.dictCity = area.dictCity self.dictTown = area.dicTown self.pushButton_ok.hide() self.comboBox_province.clear() # 清空items self.comboBox_province.addItem('请选择') #初始化省 for k, v in self.dictProvince.items(): self.comboBox_province.addItem(v, k) # 键、值反转 @pyqtSlot(int) def on_comboBox_province_activated(self, index): # 取省份名称 #value = self.comboBox_province.itemText(index) # 取省份的键值 key = self.comboBox_province.itemData(index) self.comboBox_town.clear() # 清空items self.comboBox_city.clear() # 清空items if key: #self.lblResult.setText('未选择!') self.comboBox_city.addItem('请选择') #初始化市 for k, v in self.dictCity[key].items(): self.comboBox_city.addItem(v, k) # 键、值反转 @pyqtSlot(int) def on_comboBox_city_activated(self, index): # 取市的名称 #value = self.comboBox_city.itemText(index) # 取市的键值 key = self.comboBox_city.itemData(index) self.comboBox_town.clear() # 清空items if key: self.comboBox_town.addItem('请选择') #初始化县区 for k, v in self.dictTown[key].items(): self.comboBox_town.addItem(v, k) # 键、值反转 @pyqtSlot(int) def on_comboBox_town_activated(self, index): self.pushButton_ok.show() @pyqtSlot() def on_pushButton_ok_clicked(self): # 取当前索引 province_index = self.comboBox_province.currentIndex() city_index = self.comboBox_city.currentIndex() town_index = self.comboBox_town.currentIndex() # 取当前省市县名称 province_name = self.comboBox_province.itemText(province_index) city_name = self.comboBox_city.itemText(city_index) town_name = self.comboBox_town.itemText(town_index) # 显示结果 self.lblResult.setText('{}-{}-{}'.format(province_name,city_name, town_name)) if __name__ == "__main__": app = QApplication(sys.argv) dlg = Logic() dlg.show() sys.exit(app.exec_())
(欢迎转载,不过请保留作者名及原文链接。)
本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/4232658.html,如需转载请自行联系原作者