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

PyQt5--基础篇:用eric6工具实现三级联动效果的更多相关文章

  1. js之省市区(县)三级联动效果

    省市区(县)三级联动效果,是我们软件开发比较常用的,特别是对一些crm,erp之类,当然也包括其他的后台管理系统,基本都涉及到,今天贴出这个常用的,方便个人复用和大家使用 <!DOCTYPE h ...

  2. Ajax来实现下拉框省市区三级联动效果(服务端基于express)

    //服务端JS代码: //提供服务端的处理 const express = require('express'); const fs = require('fs'); const app = expr ...

  3. 用Vue2仿京东省市区三级联动效果

    三级联动,随着越来越多的审美,出现了很多种,好多公司都仿着淘宝的三级联动 ,好看时尚,so我们公司也一样……为了贴代码方便,我把写在data里面省市区的json独立了出来,下载贴进去即可用,链接如下 ...

  4. Vue如何使用vue-area-linkage实现地址三级联动效果

    很多时候我们需要使用地址三级联动,即省市区三级联动.网上有很多插件,在此介绍Vue的一款地区联动插件:vue-area-linkage,下面介绍如何使用这个插件实现地址联动效果:         1. ...

  5. jQuery三级联动效果代码(省、市、区)

    很长时间都不用jquery了,有人问我jquery写三级联动的插件我就写好了发出来吧,正好需要的人都可以看看. 一.html代码 <!DOCTYPE html> <html> ...

  6. 图学java基础篇之集合工具

    两个工具类 java.utils下又两个集合相关_(准确来说其中一个是数组的)_的工具类:Arrays和Collections,其中提供了很多针对集合的操作,其中涵盖了一下几个方面: 拷贝.填充.反转 ...

  7. 【Android开发日记】之基础篇(二)——Android的动画效果

          什么是动画,动画的本质是通过连续不断地显示若干图像来产生“动”起来的效果.比如说一个移动的动画,就是在一定的时间段内,以恰当的速率(起码要12帧/秒以上,才会让人产生动起来的错觉)每隔若干 ...

  8. ionic+AnjularJs实现省市县三级联动效果

    建议对ionic和AnjularJs有一定了解的人可以用到,很多时候我们要用到选择省份.城市.区县的功能,现在就跟着我来实现这个功能吧,用很少的代码(我这里是根据客户的要求,只显示想要显示的部分省份和 ...

  9. 基于jQuery+JSON的省市县 二级 三级 联动效果

    省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最为常见.开发者一般使用Ajax实现无刷新下拉联动.本文将讲述,利用jQuery插件,通过读取JSON数据,实现无刷新动态下拉 ...

随机推荐

  1. java ———基础总结

    计算机语言的分类:  机器语言: 是计算机唯一能接受和执行的语言,只有二进制数字表示. 汇编语言: 是用助记符表示指令功能的计算机语言. 高级语言: 与自然语言相近并为计算机所接受和执行的计算机语言. ...

  2. shell总的exit与sleep

  3. ES6之promise的使用

    let checkLogin = function () { return new Promise(function (resolve,reject) { let flag = document.co ...

  4. 什么是IPFS?(一)

    写在前面: 今天先写到这里, 关于IPFS的所有事情小编都想快点告诉大家, 但毕竟精力有限, 小编尽量抽出时间提供更多的关于IPFS的信息. ----------------------------- ...

  5. Mysql5.7动态修改innodb_buffer_pool_size

    SELECT @@innodb_buffer_pool_size,@@innodb_buffer_pool_chunk_size,@@innodb_buffer_pool_instances; SET ...

  6. Struts2 学习之小白开始

    Struts2 基础知识学习总结 Struts2 概述:Struts2 是一个用来开发 MVC 应用程序的框架,他提供了 Web 应用程序开发过程中的一些常见问题的解决方案,比如对于用户输入信息合法性 ...

  7. Java语法基础(1)

    Java语法基础(1) 1.      Java是一门跨平台(也就是跨操作系统)语言,其跨平台的本质是借助java虚拟机 (也就是JVM(java virtual mechinal))进行跨平台使用. ...

  8. 【Django】 rest-framework和RestfulAPI的设计

    [rest-framework] 这是一个基于django才能发挥作用的组件,专门用于构造API的. 说到API,之前在其他项目中我也做过一些小API,不过那些都是玩票性质,结构十分简单而且要求的设计 ...

  9. c++ --> union介绍

    union介绍 共用体,也叫联合体,在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目 ...

  10. Matlab绘图基础——axis设置坐标轴取值范围

    peaks; axis tight  %Set the axis limits to equal the range of the data  axis square axis 'auto x'  % ...