PyQt5--基礎篇:用eric6工具實現三級聯動效果

今天給你們介紹下python gui界面的三級聯動效果,咱們用工具eric6來實現,先看下效果圖。python

 

 

 

 

首先咱們先建立項目linkage,再新建窗體進入到Qt設計師工具開始設計界面,完成後保存並退出。json

 

在eric6工具中編譯窗體,再選擇生成對話框代碼,咱們在複選框的函數中勾選on_province_activated(int)這個函數,確認後生成兩個新的py文件,咱們一般在ui_linkage.py文件中處理界面編輯優化,在linkage.py文件中處理事件機制(槽),咱們三級聯動效果主要在linkage.py中完成功能代碼。app

  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     
相關文章
相關標籤/搜索