今天给大家介绍下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_())

最新文章

  1. 函数find(exp)
  2. Maven No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? 问题
  3. python tornado websocket 多聊天室(返回消息给部分连接者)
  4. windows部署React-Native的开发环境实践(技术细节)
  5. C-线性顺序表的增删改查
  6. Nginx 反向代理、负载均衡、页面缓存、URL重写以及读写分离
  7. android4.4内核移植
  8. appium +python api 新手
  9. MD中bitmap源代码分析--数据结构
  10. PHP - 将HTML代码转义
  11. 数据库中File权限的危害
  12. Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)
  13. Go:学习笔记兼吐槽(1)
  14. CRM项目之stark组件(1)
  15. 通过ip查找能应机器的MAC
  16. Google Analytics访问空白的解决方法
  17. Win32 API编程:使用CreateProcess创建新进程
  18. hdu 2086 A1 = ?(数学题)
  19. 金融科技行业 SDL(转载)
  20. 团队项目-BUG排查-ADT工程 To Android Studio 一整天的排查日记

热门文章

  1. Ubuntu Mininet环境搭建
  2. neo智能合约的生命周期
  3. CXGrid TcxButtonEdit 信息获取 TcxButtonEditProperties取得TcxGridDBTableView
  4. NGINX压力测试
  5. 修改UI及盒子启动及部分后续操作
  6. 【Bootstrap】bootstrap-fileinput上传文件插件
  7. RxJS -- Subscription
  8. Spring AOP 的proxy详解
  9. 解决数据库mysql插入乱码问题
  10. openjudge(二)