Python GUI項目實戰(zhàn)(三)實現(xiàn)信息查詢功能

前言

上一講我們實現(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ù)項;點擊顯示全部按鈕便可顯示全部的學生信息如贷。

效果如下:
2.gif

二陷虎、多條件組合查詢

分析:

多條件查詢的難點:如果有的條件沒有填寫,在手機查詢條件的時候到底是否采集杠袱?
我們采用的方案是:無論是否填寫尚猿,都采集數(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)
顯示效果
3.gif

最后

本節(jié)我們已經(jīng)實現(xiàn)了學生信息的查詢包括單條件查詢和組合查詢臭笆,但是我們還想點擊指定條目查看學生具體的明細信息該怎么實現(xiàn)呢?下一節(jié)我們將介紹如何實現(xiàn)學生明細信息的查看秤掌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愁铺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子闻鉴,更是在濱河造成了極大的恐慌茵乱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孟岛,死亡現(xiàn)場離奇詭異瓶竭,居然都是意外死亡,警方通過查閱死者的電腦和手機渠羞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門斤贰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人次询,你說我怎么就攤上這事荧恍。” “怎么了渗蟹?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵块饺,是天一觀的道長赞辩。 經(jīng)常有香客問我,道長授艰,這世上最難降的妖魔是什么辨嗽? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮淮腾,結(jié)果婚禮上糟需,老公的妹妹穿的比我還像新娘。我一直安慰自己谷朝,他們只是感情好洲押,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著圆凰,像睡著了一般杈帐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上专钉,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天挑童,我揣著相機與錄音,去河邊找鬼跃须。 笑死站叼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的菇民。 我是一名探鬼主播尽楔,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼第练!你這毒婦竟也來了阔馋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤复旬,失蹤者是張志新(化名)和其女友劉穎垦缅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驹碍,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡壁涎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了志秃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怔球。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浮还,靈堂內(nèi)的尸體忽然破棺而出竟坛,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布担汤,位于F島的核電站涎跨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏崭歧。R本人自食惡果不足惜隅很,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望率碾。 院中可真熱鬧叔营,春花似錦、人聲如沸所宰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仔粥。三九已至婴谱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間件炉,已是汗流浹背勘究。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斟冕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓缅阳,卻偏偏與公主長得像磕蛇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子十办,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355