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

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

 

转载于:https://www.cnblogs.com/gentleman-shao/p/8795636.html

PyQt是一个创建Python GUI应用程序的工具包,它是Qt和Python结合的一个产物,可以说是为了将Qt的功能用于Python开发的一个Qt的Python包装器。它提供了丰富的图形界面组件和功能,可以用于创建各种类型的应用程序,包括多图像联动的应用程序。\[2\] 在PyQt实现多图像联动可以通过信号和槽机制来实现。可以将一个图像的变化作为信号发送给其他图像,其他图像接收到信号后进行相应的更新。具体的实现方式可以参考PyQt的官方文档和教程,以及一些开源项目和示例代码。在这些资源中,你可以找到关于如何创建多个图像窗口、如何发送和接收信号以及如何实现图像联动的详细说明和示例代码。 另外,老猿PyQT专栏也提供了关于使用PyQt开发图形界面Python应用的基础教程,其中可能包含了一些关于多图像联动的内容。你可以参考该专栏中的相关文章,获取更多关于PyQt的知识和实践经验。\[1\] #### 引用[.reference_title] - *1* *2* *3* [一文带你读懂PyQt:用Python做出与C++一样的GUI界面应用程序](https://blog.csdn.net/LaoYuanPython/article/details/116277230)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值