PyQt5--基础篇:用eric6工具实现三级联动效果

匿名 (未验证) 提交于 2019-12-02 22:51:30

今天给大家介绍下python gui界面的三级联动效果,我们用工具eric6来实现,先看下效果图。

首先我们先创建项目linkage,再新建窗体进入到Qt设计师工具开始设计界面,完成后保存并退出。

在eric6工具中编译窗体,再选择生成对话框代码,我们在复选框的函数中勾选on_province_activated(int)这个函数,确认后生成两个新的py文件,我们通常在ui_linkage.py文件中处理界面编辑优化,在linkage.py文件中处理事件机制(槽),我们三级联动效果主要在linkage.py中完成功能代码。

  1 # -*- coding: utf-8 -*-   2    3 """   4 Module implementing Linkage.   5 """   6    7 from PyQt5.QtCore import pyqtSlot   8 from PyQt5.QtWidgets import QDialog, QApplication   9 import json  10   11 from Ui_linkage import Ui_Linkage  12   13   14 class Linkage(QDialog, Ui_Linkage):  15     """  16     Class documentation goes here.  17     """  18     def __init__(self, parent=None):  19         """  20         Constructor  21           22         @param parent reference to the parent widget  23         @type QWidget  24         """  25         super(Linkage, self).__init__(parent)  26         self.setupUi(self)  27         #初始化操作委托到initUI()  28         self.initUI()  29     def initUI(self):  30         with open('data.json', 'r', encoding='utf-8') as f:  31             self.data=json.load(f)  32         #初始化三级联动下拉框的数据  33         self.choosep=''  34         self.choosec=''  35         self.choosea=''  36         self.label_result.setText('选择结果:(未选择)')  37         #清理当前下拉框的内容  38         self.province.clear()  39         self.city.clear()  40         self.area.clear()  41         #初始化下拉框的展示内容  42         self.province.addItem('-请选择-')  43         for s in self.data:  44             print(s['name'])  45             self.province.addItem(s['name'])  46       47     @pyqtSlot(int)  48     def on_province_activated(self, index):  49         """  50         Slot documentation goes here.  51           52         @param index DESCRIPTION  53         @type int  54         """  55         #因为我们在初始化的时候添加了请选择,所以需要做判断看当前是否点击它了  56         if index==0:  57             #点击请选择按钮后,我们需要对省、市、区进行三级联动数据清理  58             self.choosep=''  59             self.choosec=''  60             self.choosea=''  61             #需要清理后面市、区的内容  62             self.city.clear()  63             self.area.clear()  64             return  65         #获取当前选择的省份数据(因为index=0的时候是请选择所以需要-1)  66         self.choosep=self.data[index-1]  67         #清理市、区下拉框内容  68         self.city.clear()  69         self.area.clear()  70         #当前所选省得市级下拉框内容添加  71         self.city.addItem('-请选择-')  72         for s in self.choosep['city']:  73             self.city.addItem(s['name'])  74               75     @pyqtSlot(int)  76     def on_city_activated(self, index):  77         """  78         Slot documentation goes here.  79           80         @param index DESCRIPTION  81         @type int  82         """  83         if index==0:  84             #初始化市、区数据  85             self.choosec=''  86             self.choosea=''  87             #清理区的下拉框内容  88             self.area.clear()  89             return  90         #获取当前所选市的数据  91         self.choosec=self.choosep['city'][index-1]  92         #清理区的下拉框内容  93         self.area.clear()  94         #当前所选市的区下拉框内容添加  95         self.area.addItem('-请选择-')  96         for s in self.choosec['area']:  97             self.area.addItem(s)  98               99     @pyqtSlot(int) 100     def on_area_activated(self, index): 101         """ 102         Slot documentation goes here. 103          104         @param index DESCRIPTION 105         @type int 106         """ 107         if index==0: 108             #初始化区数据 109             self.choosea='' 110             return 111         #获取当前所选区数据 112         self.choosea=self.choosec['area'][index-1] 113          114     @pyqtSlot() 115     def on_sure_clicked(self): 116         str_result='选择结果:(未选择)' 117         if self.choosep: 118             str_result=self.choosep['name'] 119         if self.choosec: 120             str_result=str_result+'-'+self.choosec['name'] 121         if self.choosea: 122             str_result=str_result+'-'+self.choosea 123         self.label_result.setText(str_result) 124          125     @pyqtSlot() 126     def on_cancel_clicked(self): 127         #返回初始状态 128         self.initUI() 129 if __name__=='__main__': 130     import sys 131     app=QApplication(sys.argv) 132     linkage=Linkage() 133     linkage.show() 134     sys.exit(app.exec_()) 135  136     

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!