用 eric6 与 PyQt5 实现python的极速GUI编程(系列02)---- 省市县(区)下拉列表多级联动-阿里云开发者社区

开发者社区> 开发与运维> 正文

用 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中:

 View Code

然后在 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,如需转载请自行联系原作者

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章