前言
上一講我們實現(xiàn)了主窗體的搭建贸毕,在Treeview中顯示所有學生的概要信息虱颗,為了能夠快速的找到具體的某個學生信息晶伦,我們需要實現(xiàn)學生信息的查詢功能而芥。本節(jié)我們將介紹如何實現(xiàn)單條件查詢和多條件篩選逝淹,快速找到指定的學生信息耕姊!
一、單條件查詢
分析:
首先我們所有的學生信息在:all_student_list這個列表中栅葡,我們先需要獲取條件茉兰,然后將符合條件的數(shù)據(jù)存儲到一個新的list中query_result_list
1. 數(shù)據(jù)準備
新建一個存儲查詢結(jié)果的列表
self.query_result_list = []
由于我們要實現(xiàn)通過輸入學號來查詢學生信息的功能,所以我們需要給輸入框添加一個變量
self.var_sno = StringVar()
在原有的構(gòu)建學號輸入框的Entry_sno中欣簇,添加參數(shù)textvariable = self.var_sno
2. 寫一個查詢的方法
然后我們寫一個獨立的方法get_query_result()
规脸,來實現(xiàn)獲取查詢結(jié)果;
def get_query_result(self):
# 準備查詢條件:獲取學號
query_condition = self.Entry_sno.get()
# 遍歷List獲取符合條件的學生信息
for item in self.all_student_list:
if query_condition in item[0]:
# 滿足條件的學生
self.query_result_list.append(item)
# 把結(jié)果加載的TreeView中
self.load_treeview(self.query_result_list)
3. 清空處理
每次調(diào)用load_treeciew()方法都會將列表中的數(shù)據(jù)存入Tree中,所以我們在使用函數(shù)load_treeview()方法之前熊咽,需要把當前TreeView中的內(nèi)容清空莫鸭,清空的方法如下:
for i in self.Tree.get_children():
self.Tree.delete(i)
然后把條件捆綁到Button_query上
command = self.get_query_result
于此同時,我們的query_result_list
存儲了每次查詢的結(jié)果网棍,每次查詢前如果不對其清空黔龟,則每次查詢結(jié)果都有上次的記錄。所以我們每次查詢操作前都要對query_result_list
列表做清空處理:
self.query_result_list.clear()
4. 實現(xiàn)顯示全部數(shù)據(jù)的功能
實現(xiàn)顯示全部學生信息的功能很簡單滥玷,我們寫一個獨立的方法load_all_student()氏身,我們可以把之前自動執(zhí)行的函數(shù)添加進來就可以了
def load_all_student(self):
# 加載所有的學生信息到treeview
self.load_treeview(self.all_student_list)
然后我們把load_all_student()函數(shù)捆綁到,Button_all這個按鈕上即可,同樣我們只需添加參數(shù)command = self.load_all_student
即可惑畴。
至此我們便實現(xiàn)了單條件查詢功能蛋欣,通過輸入學號點擊查詢按鈕便可以在結(jié)果中查詢到數(shù)據(jù)項;點擊顯示全部按鈕便可顯示全部的學生信息如贷。
效果如下:
二陷虎、多條件組合查詢
分析:
多條件查詢的難點:如果有的條件沒有填寫,在手機查詢條件的時候到底是否采集杠袱?
我們采用的方案是:無論是否填寫尚猿,都采集數(shù)據(jù)。主要判斷邏輯為:
if sno in list and name in list and mobile in list and id in list
因為楣富,如果沒有填寫采集到的數(shù)據(jù)為空凿掂,"" in list
不影響結(jié)果的判斷。
那么如何把這些條件組合起來呢?一個條件我們上面用的是字符串庄萎,那么多個條件我們用列表即可踪少。
1. 數(shù)據(jù)準備
在setup_UI()
這個函數(shù)中,對每個Entry控件糠涛,添加textvariable
變量
# 準備查詢條件援奢,去空格后往列表中添加數(shù)據(jù)
query_condition = []
query_condition.append(self.Entry_sno.get().strip()) #采集學號信息
query_condition.append(self.Entry_name.get().strip()) # 采集姓名信息
query_condition.append(self.Entry_mobile.get().strip()) # 采集手機號碼信息
query_condition.append(self.Entry_id.get().strip()) # 采集身份證號碼信息
2. 修改遍歷方法
因為我們現(xiàn)在的查詢條件query_condition
已經(jīng)不是字符串了,所以對應的遍歷方法就要做相應的修改,query_condition列表中的下標為0忍捡、1集漾、2、3分別是學號锉罐、姓名帆竹、手機號、身份證號脓规,對應的數(shù)據(jù)源中的單個數(shù)據(jù)列表的位置是0、1险领、4侨舆、7
# 遍歷List獲取符合條件的學生信息
for item in self.all_student_list:
if query_condition[0] in item[0] and query_condition[1] in item[1] and \
query_condition[2] in item[4] and query_condition[3] in item[7]:
# 滿足條件的學生
self.query_result_list.append(item)
3. 點擊顯示全部按鈕后輸入框清空
我們在獲得查詢結(jié)果后,點擊了顯示全部按鈕绢陌,此時各個Entry框里的數(shù)值應當清空挨下。所以在load_all_student
函數(shù)中,將各個組件的數(shù)值清空脐湾,我們可以使用set()方法:
def load_all_student(self):
# 把所有條件文本框清空
self.var_sno.set("")
self.var_name.set("")
self.var_mobile.set("")
self.var_id.set("")
# 加載所有的學生信息到treeview
self.load_treeview(self.all_student_list)
顯示效果
最后
本節(jié)我們已經(jīng)實現(xiàn)了學生信息的查詢包括單條件查詢和組合查詢臭笆,但是我們還想點擊指定條目查看學生具體的明細信息該怎么實現(xiàn)呢?下一節(jié)我們將介紹如何實現(xiàn)學生明細信息的查看秤掌。