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

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

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

 # -*- coding: utf-8 -*-

 """
Module implementing Linkage.
""" from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog, QApplication
import json from Ui_linkage import Ui_Linkage class Linkage(QDialog, Ui_Linkage):
"""
Class documentation goes here.
"""
def __init__(self, parent=None):
"""
Constructor @param parent reference to the parent widget
@type QWidget
"""
super(Linkage, self).__init__(parent)
self.setupUi(self)
#初始化操作委托到initUI()
self.initUI()
def initUI(self):
with open('data.json', 'r', encoding='utf-8') as f:
self.data=json.load(f)
#初始化三级联动下拉框的数据
self.choosep=''
self.choosec=''
self.choosea=''
self.label_result.setText('选择结果:(未选择)')
#清理当前下拉框的内容
self.province.clear()
self.city.clear()
self.area.clear()
#初始化下拉框的展示内容
self.province.addItem('-请选择-')
for s in self.data:
print(s['name'])
self.province.addItem(s['name']) @pyqtSlot(int)
def on_province_activated(self, index):
"""
Slot documentation goes here. @param index DESCRIPTION
@type int
"""
#因为我们在初始化的时候添加了请选择,所以需要做判断看当前是否点击它了
if index==0:
#点击请选择按钮后,我们需要对省、市、区进行三级联动数据清理
self.choosep=''
self.choosec=''
self.choosea=''
#需要清理后面市、区的内容
self.city.clear()
self.area.clear()
return
#获取当前选择的省份数据(因为index=0的时候是请选择所以需要-1)
self.choosep=self.data[index-1]
#清理市、区下拉框内容
self.city.clear()
self.area.clear()
#当前所选省得市级下拉框内容添加
self.city.addItem('-请选择-')
for s in self.choosep['city']:
self.city.addItem(s['name']) @pyqtSlot(int)
def on_city_activated(self, index):
"""
Slot documentation goes here. @param index DESCRIPTION
@type int
"""
if index==0:
#初始化市、区数据
self.choosec=''
self.choosea=''
#清理区的下拉框内容
self.area.clear()
return
#获取当前所选市的数据
self.choosec=self.choosep['city'][index-1]
#清理区的下拉框内容
self.area.clear()
#当前所选市的区下拉框内容添加
self.area.addItem('-请选择-')
for s in self.choosec['area']:
self.area.addItem(s) @pyqtSlot(int)
def on_area_activated(self, index):
"""
Slot documentation goes here. @param index DESCRIPTION
@type int
"""
if index==0:
#初始化区数据
self.choosea=''
return
#获取当前所选区数据
self.choosea=self.choosec['area'][index-1] @pyqtSlot()
def on_sure_clicked(self):
str_result='选择结果:(未选择)'
if self.choosep:
str_result=self.choosep['name']
if self.choosec:
str_result=str_result+'-'+self.choosec['name']
if self.choosea:
str_result=str_result+'-'+self.choosea
self.label_result.setText(str_result) @pyqtSlot()
def on_cancel_clicked(self):
#返回初始状态
self.initUI()
if __name__=='__main__':
import sys
app=QApplication(sys.argv)
linkage=Linkage()
linkage.show()
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. nginx里的sticky的作用

    1.Sticky工作原理 : Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识 ...

  2. smoking的安装和配置

    yum install -y perl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-libwww-perl perl-IO-Socket-SSL perl- ...

  3. Django基础(二):环境配置

    前戏 WEB框架简介 具体介绍Django之前,必须先介绍WEB框架等概念. web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子. 一般web框 ...

  4. 1-2 maven学习笔记(7-8章)

    一,生命周期和插件 1.除了坐标.依赖和仓库之外,maven的另外两个核心概念就是声明周期和插件. 生命周期和插件协同工作,密不可分. 清理 初始化 编译 测试 打包 集成测试 验证 部署 站点生成 ...

  5. Java使用对象流读取文件的问题

    把对象进行持久化(把对象存到本地)要用到对象流进行处理,在用对象流处理过程中,在写对象和读对象时候遇到了很多问题,分享一下. 我们处理对象数据的时候不可能只处理一个对象,在系统运行的时候,可能产生的对 ...

  6. Java异常机制简介

    什么是异常? 异常一般是指程序在编译期没有问题,但是在程序运行期出现的错误,一个程序会因为出现异常而终止运行,也就是我们常说的挂掉,在多线程下,异常只会影响所在的线程,对其他线程没有影响. Java异 ...

  7. 【SSH/SFTP】SSH协议和SFTP

    [SSH和SFTP] ■ 设置一个只允许访问部分目录的SFTP服务器 由于SSH和SFTP之间的紧密联系,一个SFTP服务器必然会导致开放一定的SSH服务,而SSH的风险显然比SFTP要大一些.自然, ...

  8. Elasticsearch安装详解

    本文只介绍在windows上的安装和配置,其他安装和配置请参见官方文档 ES在windows上安装需下载zip安装包,解压后bin目录下有个 elasticsearch-service.bat 文件. ...

  9. SpagoBi开发示例——员工离职人数统计

    1.开发工具:SpagoBIStudio_5.1,操作界面和使用方法和eclipse没差 安装参考:http://www.cnblogs.com/starlet/p/4778334.html   2. ...

  10. 听翁恺老师mooc笔记(14)--格式化的输入与输出

    关于C语言如何做文件和底层操作: 文件操作,从根本上说,和C语言无关.这部分的内容,是教你如何使用C语言的标准库所提供的一系列函数来操作文件,最基本的最原始的文件操作.你需要理解,我们在这部分所学习的 ...