• 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     
  • 相关阅读:
    js变量如何赋值给css使用?
    前端预览与下载PDF小结
    子组件如何改父组件传过来的值
    TensorRT转换时的静态模式与动态模式
    Linux:搭建GlusterFS文件系统
    OpenFeign传输文件MultipartFile
    Docker:commit、export、import、save、load命令的使用
    Git:代码版本回退
    docker安装Drools Workbench
    ArchLinux:Typora设置gitee图床
  • 原文地址:https://www.cnblogs.com/gentleman-shao/p/8795636.html
Copyright © 2020-2023  润新知