用 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 ,如需转载请自行联系原作者
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值