版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第2章Python編程基礎(chǔ)
本章內(nèi)容2.1Python語言簡介2.2Python基本語法2.3Python面向?qū)ο蟪绦蛟O(shè)計2.4Python圖形界面設(shè)計2.5Python常見格式文件操作2.6Python第三方庫2.1Python語言簡介Python是一門跨平臺、開源、免費的解釋型高級動態(tài)編程語言Python易于學(xué)習(xí),擁有大量的模塊,可以高效地開發(fā)各種應(yīng)用程序Python的創(chuàng)始人是吉多﹒范羅蘇姆(GuidovanRossum),發(fā)明時間是1989年底Python被廣泛應(yīng)用于處理系統(tǒng)管理任務(wù)和科學(xué)計算,是最受歡迎的程序設(shè)計語言之一根據(jù)IEEESpectrum發(fā)布的研究報告,Python目前是世界上最受歡迎的語言Python語言的應(yīng)用領(lǐng)域包括:Web開發(fā)、網(wǎng)絡(luò)編程、科學(xué)計算與數(shù)據(jù)可視化、數(shù)據(jù)庫應(yīng)用等2.2Python語言基本語法2.2.1基礎(chǔ)數(shù)據(jù)類型數(shù)值類型:整型、浮點型、復(fù)數(shù)字符串類型:用引號表示字符串布爾類型:只有True和False兩種值,是邏輯運算的結(jié)果空值:用None表示,不支持任何運算也沒有任何內(nèi)置函數(shù)方法2.2.2序列數(shù)據(jù)結(jié)構(gòu)Python內(nèi)置序列類型包括有索引順序的列表、元組、字符串以及無序的字典、集合。1.列表list用逗號分隔數(shù)據(jù)項,所有數(shù)據(jù)項用方括號括起來,數(shù)據(jù)項不必具有相同的類型,例如:list1=['中國','美國',1997,2000]list2=[1,2,3,4,5]
列表元素的索引從0開始,支持通過索引訪問列表元素以及切片操作(1)訪問列表中的值list1=['中國','美國',1997,2000]list2=[1,2,3,4,5,6,7]print("list1[0]:",list1[0])print("list2[1:5]:",list2[1:5])print("list2[1:-2]:",list2[1:-2]print("list2[1:5:2]:",list2[1:5:2]print("list2[::-1]:",list2[::-1])輸出結(jié)果:List1[0]:中國list2[1:5]:[2,3,4,5]list2[1:-2]:[2,3,4,5]list2[1:5:2]:[2,4]list2[::-1]:[7,6,5,4,3,2,1](2)更新列表list=['中國','chemistry',1997,2000]print("Valueavailableatindex2:")print(list[2])list[2]=2001print("Newvalueavailableatindex2:")print(list[2])輸出結(jié)果:Valueavailableatindex2:1997Newvalueavailableatindex2:2001(3)刪除列表元素list1=['中國','美國',1997,2000]print(list1)dellist1[2]print("Afterdeletingvalueatindex2:")print(list1)list1=['中國','美國',1997,2000]list1.remove(1997)list1.remove('美國')print(list1)list1=['中國','美國',1997,2000]list1.pop(2) #刪除位置2元素1997list1.pop() #刪除最后一個元素2000print(list1)(4)添加列表元素(5)列表排序list1=['中國','美國',1997,2000]list1.append(2003)print(list1)list1=[5,2,3,1,4]list1.sort()#list1是[1,2,3,4,5]list1=[5,2,3,1,4]list2=sorted(list1)#list2是[1,2,3,4,5],list1不變list1=[5,2,3,1,4]list1.sort(reverse=True)#list1是[5,4,3,2,1],True是降序排序,F(xiàn)alse是升序排序(6)定義多維列表二維列表的外層元素是一維列表,三維列表的元素二維列表例如:定義1個二維列表list2=[["CPU","內(nèi)存"],["硬盤","聲卡"]]二維列表比一維列表多一個索引,可以如下方式表示列表元素:列表名[索引1][索引2]例如:定義3行6列的二維列表,打印出元素值rows=3cols=6matrix=[[0forcolinrange(cols)]forrowinrange(rows)]#用列表生成式生成二維列表foriinrange(rows):forjinrange(cols):matrix[i][j]=i*3+jprint(matrix[i][j],end=",")print('\n')0,1,2,3,4,5,3,4,5,6,7,8,6,7,8,9,10,11,2.元組tuplePython的元組(tuple)與列表類似,不同之處在于元組的元素不能修改。元組使用小括號(),列表使用方括號[]。元組中的元素類型也可以不相同。創(chuàng)建元組如果創(chuàng)建空元組,只需寫個空括號即可元組中只包含一個元素時,需要在第一個元素后面添加逗號tup1=('中國','美國',1997,2000)tup2=(1,2,3,4,5)tup3="a","b","c","d"tup1=()tup1=(50,)(2)訪問元組元組的元素通過索引訪問(3)元組連接元組中的元素不允許修改,但可以對元組進行連接組合形成新的元組(4)刪除元組
元組中的元素值不允許刪除,但可以使用del語句來刪除整個元組tup1=('中國','美國',1997,2000)tup2=(1,2,3,4,5,6,7)print("tup1[0]:",tup1[0])print("tup2[1:5]:",tup2[1:5])#切片print(tup2[2:])#切片print(tup2*2)輸出結(jié)果:tup1[0]:中國tup2[1:5]:(2,3,4,5)(3,4,5,6,7)(1,2,3,4,5,6,7,1,2,3,4,5,6,7)(5)序列數(shù)據(jù)類型的轉(zhuǎn)換
列表、元組和字符串之間可以互相轉(zhuǎn)換,需要使用三個函數(shù),str()、tuple()和list()tup1=(1,2,3,4,5)list1=list(tup1)
#元組轉(zhuǎn)為列表list2=[1,3,5,7,8,13,20]str1=str(list2)#列表轉(zhuǎn)為字符串,返回含中括號及逗號的’[1,3,5,7,8,13,20]’字符串list2=['中國','美國','日本','加拿大']str2=“%”.join(list2)#用百分號連接起來的字符串——'中國%美國%日本%加拿大'3.字典dict字典可以存儲任意類型的數(shù)據(jù),如字符串、數(shù)字、元組等。字典也被稱作關(guān)聯(lián)數(shù)組或哈希表。(1)創(chuàng)建字典
字典由鍵和對應(yīng)值(key=>value)成對組成。字典的每個鍵/值對里面鍵和值用冒號分隔,鍵/值對之間用逗號分隔,整個字典包含在花括號中?;菊Z法如下:d={key1:value1,key2:value2}注意:鍵必須是唯一的,但值則不必。值可以取任何數(shù)據(jù)類型,但鍵必須是不可變的,如字符串,數(shù)字或元組。例如:dict={'xmj':40,'zhang':91,'wang':80}(2)字典元素的訪問(3)修改字典dict={'Name':'王海','Age':17,'Class':'計算機一班'}print("dict['Name']:",dict['Name'])print("dict['Age']:",dict['Age'])輸出結(jié)果:dict['Name']:王海dict['Age']:17dict={'Name':'王海','Age':17,'Class':'計算機一班'}dict['Age']=18 #更新鍵/值對dict['School']="中原工學(xué)院" #增加新的鍵/值對print("dict['Age']:",dict['Age'])print("dict['School']:",dict['School'])輸出結(jié)果:dict['Age']:18dict['School']:中原工學(xué)院(4)字典的刪除(5)in運算dict={'Name':'王海','Age':17,'Class':'計算機一班'}deldict['Name']#刪除鍵是'Name'的元素dict.clear#清空字典所有元素deldict #刪除字典,用del后字典不存在dict={'Name':'王海','Age':17,'Class':'計算機一班'}print('Age'indict) #等價于print(dict.has_key('Age'))(6)獲取字典中的所有值/鍵值對dict={'Name':'王海','Age':17,'Class':'計算機一班'}print(dict.values())輸出結(jié)果:[17,'王海','計算機一班']dict={'Name':'王海','Age':17,'Class':'計算機一班'}forkey,valueindict.items():print(key,value)print(dict.items())輸出結(jié)果:Name王海Class計算機一班Age17dict_items([('Name','王海'),('Age',17),('Class','計算機一班')])4.集合set
集合(set)是一個無序的包含不重復(fù)元素的組合數(shù)據(jù)類型。(1)創(chuàng)建集合
可以使用大括號({})或者set()函數(shù)創(chuàng)建集合,注意:創(chuàng)建一個空集合必須用set()而不是{},因為{}是用來創(chuàng)建一個空字典以上代碼的輸出結(jié)果:student={'Tom','Jim','Mary','Tom','Jack','Rose'}print(student)#輸出集合,重復(fù)的元素被自動去掉{'Jack','Rose','Mary','Jim','Tom'}(2)成員測試in運算(3)集合運算a=set('abcd')b=set('cdef')print(a)print("a和b的差集:",a-b)#a和b的差集print("a和b的并集:",a|b)#a和b的并集print("a和b的交集:",a&b)#a和b的交集print("a和b中不同時存在的元素:",a^b)#a和b中不同時存在的元素輸出結(jié)果:{'a','c','d','b'}a和b的差集:{'a','b'}a和b的并集:{'b','a','f','d','c','e'}a和b的交集:{'c','d'}a和b中不同時存在的元素:{'a','e','f','b'}2.2.3Python控制語句1.選擇結(jié)構(gòu)【例2-1】輸入一個年份,判斷是否為閏年。閏年的年份必須滿足以下兩個條件之一:(1)能被4整除,但不能被100整除的年份都是閏年。(2)能被400整除的年份都是閏年。if表達式:
語句1真假表達式語句1if表達式:
語句1else:
語句2真假表達式語句1語句2判斷閏年的兩個條件是“或”關(guān)系,對應(yīng)的邏輯表達式為:
(year%4==0andyear%100!=0)oryear%400==0程序代碼:year=int(input('輸入年份:'))#輸入x,input()獲取的是字符串,所以需要轉(zhuǎn)換成整型ifyear%4==0andyear%100!=0oryear%400==0: #使用運算符的優(yōu)先級
print(year,"是閏年")else:print(year,"不是閏年")多分支結(jié)構(gòu)if表達式1:
語句1elif表達式2:
語句2……elif表達式n:
語句nelse:
語句n+1真真真真
假假假假表達式1表達式2
表達式3表達式n語句1語句2語句3語句n語句n+1………【例2-2】輸入學(xué)生的成績score,按分數(shù)輸出其等級:score≥90為優(yōu),90>score≥80為良,80>score≥70為中等,70>score≥60為及格,score<60為不及格。score=int(input("請輸入成績"))#int()轉(zhuǎn)換字符串為整型ifscore>=90:print("優(yōu)")elifscore>=80:print("良")elifscore>=70:print("中")elifscore>=60:print("及格")else:print("不及格")2.循環(huán)結(jié)構(gòu)(1)while循環(huán)while判斷條件:
執(zhí)行語句真
表達式語句假
count=0whilecount<5:print('Thecountis:',count)count=count+1print("Goodbye!")(2)for循環(huán)for循環(huán)索引值in序列:
循環(huán)體fruits=['banana','apple','mango']forfruitinfruits:#遍歷列表fruitsprint('元素:',fruit)print("Goodbye!")元素:banana元素:apple元素:mangoGoodbye!【例2-3】計算0~10的整數(shù)之和,可以用一個sum變量做累加。程序代碼:sum=0forxinrange(11):sum=sum+xprint(sum)(3)Continue和break語句break語句在while循環(huán)和for循環(huán)中都可以使用,一般放在if選擇結(jié)構(gòu)中,一旦break語句被執(zhí)行,將使得整個循環(huán)提前結(jié)束continue語句的作用是終止當(dāng)前循環(huán),并忽略continue之后的語句,然后回到循環(huán)的頂端,提前進入下一次循環(huán)【例2-4】continue和break用法示例。i=1whilei<10:i+=1ifi%2>0:#奇數(shù)時跳過輸出continueprint(i)#輸出偶數(shù)2、4、6、8、10i=1#i值為1whileTrueprint(i)#輸出1~10i+=1ifi>10:#當(dāng)i大于10時跳出整個循環(huán)break2.2.4Python函數(shù)與模塊當(dāng)某些任務(wù),例如求一個數(shù)的階乘,需要在一個程序中不同位置重復(fù)執(zhí)行時,這樣造成代碼的重復(fù)率高,應(yīng)用程序代碼煩瑣。解決這個問題的方法就是使用函數(shù)。無論在哪種編程語言當(dāng)中,函數(shù)(在類中也稱作方法,意義是相同的)都扮演著至關(guān)重要的角色。模塊是Python的代碼組織單元,它將函數(shù)、類和數(shù)據(jù)封裝起來以便重用,模塊往往對應(yīng)Python程序文件,Python標準庫和第三方提供了大量的模塊。1.函數(shù)的定義(1)在Python中采用def關(guān)鍵字進行函數(shù)的定義(2)函數(shù)參數(shù)可以是零個、一個或者多個,函數(shù)參數(shù)不用指定參數(shù)類型,因為在Python中變量都是弱類型的,Python會自動根據(jù)值來維護其數(shù)據(jù)類型(3)Python函數(shù)的定義中縮進部分是函數(shù)體(4)函數(shù)的返回值是通過函數(shù)中的return語句獲得的。return語句是可選的,它可以在函數(shù)體內(nèi)任何地方出現(xiàn),表示函數(shù)調(diào)用執(zhí)行到此結(jié)束;如果沒有return語句,會自動返回None(空值),如果有return語句,但是return后面沒有接表達式或者值的話也是返回None(空值)def函數(shù)名(函數(shù)參數(shù)):
函數(shù)體return表達式或者值defprintNum(): #打印輸出0--9數(shù)字foriinrange(10):print(i)
return2.函數(shù)的使用函數(shù)定義后,即可使用。但是在函數(shù)定義之前,不允許使用該函數(shù)?!纠?-5】編寫函數(shù),計算形式如a+aa+aaa+aaaa+…+aaa…aaa的表達式的值,其中a為小于10的自然數(shù)。例如,2+22+222+2222+22222(此時n=5),a、n由用戶從鍵盤輸入。DefmySum(a,n):result,t=0,0#同時將result、t賦值為0foriinrange(n):t=t*10+aresult+=treturnresult#用戶輸入兩個數(shù)字a=int(input("輸入a:"))n=int(input("輸入n:"))print(mySum(a,n)) 輸入a:2↙輸入n:5↙246903.模塊
模塊(module)能夠有邏輯地組織Python代碼段。把相關(guān)的代碼分配到一個模塊里能讓代碼更好用,更易懂。簡單地說,模塊就是一個保存Python代碼的文件。模塊里能定義函數(shù)、類和變量。模塊的導(dǎo)入方法一:import模塊名
在調(diào)用模塊中的函數(shù)時,必須這樣調(diào)用:
模塊名.函數(shù)名模塊的導(dǎo)入方法二:from模塊名import函數(shù)名1,函數(shù)名2....通過這種方式導(dǎo)入模塊后,調(diào)用函數(shù)時只需給出函數(shù)名2.3Python面向?qū)ο笤O(shè)計面向?qū)ο蟪绦蛟O(shè)計(ObjectOrientedProgramming,OOP)思想主要針對較復(fù)雜應(yīng)用程序設(shè)計而提出,使得軟件設(shè)計更加靈活且易于管理,能夠很好地支持代碼復(fù)用和設(shè)計復(fù)用,并且使得代碼具有更好的可讀性和可擴展性?,F(xiàn)實生活中的每一個相對獨立的事物都可以看作一個對象,例如,一個人,一輛車,一臺電腦等。對象是具有某些特性和功能的具體事物的抽象。比如一個人具有姓名、性別、年齡、身高、體重等特征描述,也有走路、說話、學(xué)習(xí)、開車等功能行為。面向?qū)ο蟪绦蛟O(shè)計思想更貼近生產(chǎn)實踐,例如制造一臺汽車,需要將車輪、車窗、車架等部件組裝在一起,這樣使生產(chǎn)成本更低也避免了反復(fù)制造“輪子”。每個對象都是基于類構(gòu)建,類是創(chuàng)建對象的模板、是對象的抽象和概括。Python完全采用面向?qū)ο蟪绦蛟O(shè)計的思想,是真正的面向?qū)ο蟮母呒壘幊陶Z言,
Python中“一切皆對象”,對象又被稱為實例。2.3.1定義和使用類1.類的定義用變量表示對象的屬性,用函數(shù)(方法)表示對象行為簡單語法如下:class類名:
屬性(成員變量)……
成員函數(shù)(成員方法).……例如定義Person類:classPerson:num=1
#num是成員變量(屬性)defSayHello(self): #SayHello是成員函數(shù),self是必須填寫的參數(shù)print("Hello!")2.實例的定義前面定義的Person是一個類,某個具體的人就是一個實例對象,實例基于類來定義。只有定義了具體的對象,才能通過“對象名.成員”的方式來訪問其中的成員變量或成員方法。例如,下面的代碼定義了一個Person類的實例p:p=Person()p.SayHello() #訪問成員函數(shù)SayHello(),程序運行結(jié)果是輸出“Hello!”2.3.2構(gòu)造函數(shù)類中,可以定義一個特殊的,叫作__init__()的方法(構(gòu)造函數(shù),以兩個下劃線“_”開頭和結(jié)束)。
一個類定義了__init__()方法以后,類實例化時就會自動為新生成的實例對象調(diào)用__init__()方法。
構(gòu)造函數(shù)一般用于為實例對象的數(shù)據(jù)成員設(shè)置初值或進行其他必要的初始化工作。如果用戶未涉及構(gòu)造函數(shù),Python將提供一個默認的構(gòu)造函數(shù)。例如:定義一個復(fù)數(shù)類Complex,使用構(gòu)造函數(shù)進行類的成員變量的初始化工作。classComplex:def__init__(self,realpart,imagpart):self.r=realpart#實例屬性self.i=imagpartx=Complex(3.0,-4.5)#定義實例xprint(x.r,x.i)#輸出:3.0-4.52.3.3析構(gòu)函數(shù)Python中類的析構(gòu)函數(shù),名稱是__del__,用來釋放實例對象占用的資源。如果用戶未涉及析構(gòu)函數(shù),Python將提供一個默認的析構(gòu)函數(shù)進行必要的清理工作。2.3.4實例屬性和類屬性屬性(成員變量)有兩種,一種是實例屬性,另一種是類屬性(類變量)
實例屬性是在構(gòu)造函數(shù)__init__中定義的,定義時以self作為前綴
類屬性是在類的方法之外定義的屬性
在主程序中(在類定義的外部),實例屬性屬于實例(對象),只能通過實例對象名訪問;類屬性屬于類,通過類名訪問,也可以通過實例對象名訪問,為類的所有實例共享?!纠?-8】定義含有實例屬性(姓名name,年齡age)和類屬性(人數(shù)num)的Person人員類。classPerson:num=0#類屬性,初始為0,記錄Person類的實例對象個數(shù)(人數(shù))def__init__(self,str,n):#類的構(gòu)造函數(shù)=str#實例屬性,姓名self.age=n#實例屬性,年齡Person.num+=1#每創(chuàng)建一個類的實例,自動調(diào)用構(gòu)造函數(shù),人數(shù)num增加1defPrintInfo(self):#成員函數(shù),輸出實例屬性值(姓名和年齡)print("姓名:",,"年齡:",self.age)defPrintPN(self):#成員函數(shù),輸出類屬性值(人數(shù)num)print(Person.num)p1=Person("夏敏捷",42)p2=Person("張海",36)p1.PrintInfo()p2.PrintInfo()print("目前人數(shù):",Person.num)#在類定義的外部,輸出類屬性值p1.PrintPN()print(p1.num)Person.PrintPN(p1)姓名:夏敏捷年齡:42姓名:張海年齡:36目前人數(shù):22222.3.5私有成員與公有成員Python并沒有對私有成員提供嚴格的訪問保護機制。在定義類的屬性時,如果屬性名以兩個下劃線“__”開頭則表示是私有屬性,否則是公有屬性。私有屬性在類的外部不能直接訪問【例2-9】為Car類定義私有成員。classCar:price=100000#定義類屬性def__init__(self,c,w):self.color=c#定義公有實例屬性colorself.__weight=w#定義私有實例屬性__weight#主程序car1=Car("Red",10.5)car2=Car("Blue",11.8)print(car1.color)print(car1._Car__weight)print(car1.__weight) Red10.5AttributeError:'Car'objecthasnoattribute'__weight'2.3.6方法類的方法可以分為實例方法和類方法兩類實例方法:通過類的對象(實例)來調(diào)用。在實例方法的定義中,通過self關(guān)鍵字來引用該實例,并可以訪問該實例的屬性和方法。實例方法可以用于處理實例對象的數(shù)據(jù),例如更新實例對象的屬性值。類方法:類方法通過類本身來調(diào)用,而不是通過實例。在類方法的定義中,通過cls關(guān)鍵字來訪問類的屬性和方法。類方法一般用于處理類的數(shù)據(jù),例如創(chuàng)建類的實例對象。類方法定義時需要在方法前添加@classmethod裝飾器。2.3.7類的繼承在繼承關(guān)系中,已有的、設(shè)計好的類稱為父類或基類,新設(shè)計的類稱為子類或派生類。派生類可以繼承基類除了構(gòu)造函數(shù)之外的所有成員。類繼承語法:class派生類名(基類名): #基類名寫在括號里派生類成員2.4Python圖形界面設(shè)計Python提供了多個用于開發(fā)圖形界面程序的庫,常用的PythonGUI庫如下:(1)Tkinter:Tkinter模塊("Tk接口")是Python的標準TkGUI工具包的接口。Tkinter可以在大多數(shù)的Unix平臺下使用,同樣可以應(yīng)用在Windows和Macintosh系統(tǒng)里。Tk8.0的后續(xù)版本可以實現(xiàn)本地窗口風(fēng)格,并良好地運行在絕大多數(shù)平臺中。(2)wxPython:wxPython是一款開源軟件,是Python語言的一套優(yōu)秀的GUI圖形庫,允許Python程序員很方便地創(chuàng)建完整的、功能鍵全的GUI用戶界面。(3)Jython:Jython程序可以和Java無縫集成。除了一些標準模塊,Jython使用Java的模塊。Jython幾乎擁有標準的Python中不依賴于C語言的全部模塊。比如,Jython的用戶界面使用Swing,AWT或者SWT。Jython可以被動態(tài)或靜態(tài)地編譯成Java字節(jié)碼。Tkinter是Python的標準GUI庫,無需安裝,可以直接使用。2.4.1創(chuàng)建Windows窗口【例2-13】使用Tkinter創(chuàng)建一個簡單的GUI程序。#encoding=utf-8#編碼方式聲明importtkinter #導(dǎo)入tkinter模塊root=tkinter.Tk() #創(chuàng)建Windows主窗口對象root.title("我的第一個GUI程序") #設(shè)置窗口標題root.mainloop() #進入窗口消息循環(huán),保持窗口一直運行顯示【例2-14】創(chuàng)建一個Windows窗口,初始大小為800x600。fromtkinterimport*root=Tk()root.geometry("800x600")root.mainloop()2.4.2幾何布局管理器Tkinter幾何布局管理器(GeometryManager)用于組織和管理父組件(往往是窗口)中子組件的布局方式。如果不為組件指定布局,組件將不顯示。Tkinter提供了3種不同風(fēng)格的幾何布局管理類:pack、grid和place。1.
pack布局采用塊的方式組織組件。pack布局根據(jù)子組件創(chuàng)建時的順序,將其放在界面中。選項描述side停靠在父組件的哪一邊anchor??课恢?,對應(yīng)于東南西北以及四個角fill填充空間expand擴展空間ipadx,ipady組件內(nèi)部在x/y方向上填充的空間大小padx,pady組件外部在x/y方向上填充的空間大小【例2-15】創(chuàng)建使用pack布局的GUI程序。fromtkinterimport*root=Tk()root.geometry("300x150+200+100")l1=Label(root,text="hello,python")#在windows主窗口中創(chuàng)建標簽l1l1.pack() #顯示標簽l1btn1=Button(root,text="BUTTON1")#創(chuàng)建標題文字是BUTTON1的Button組件實例btn1btn1.pack(side=LEFT) #設(shè)置btn1左??匡@示btn2=Button(root,text="BUTTON2")#創(chuàng)建文字標題是BUTTON2的Button組件實例btn2btn2.pack(side=RIGHT) #設(shè)置btn2右??匡@示root.mainloop()2.grid布局采用表格結(jié)構(gòu)組織組件。子組件的位置由行和列的單元格確定,子組件可以跨越多行/列。每一列中,列寬由這一列中最寬的單元格確定??梢詫崿F(xiàn)較復(fù)雜的界面設(shè)計。grid方法提供若干參數(shù)選項,用來定義組件布局細節(jié)。grid布局有兩個最為重要的參數(shù),一個是row,另一個是column。用來指定將子組件放置到什么位置,如果不指定row,會將子組件放置到第一個可用的行上,如果不指定column,則使用第0列(首列)。例如:B1=Button(root,text=“1”,width=5,bg=“yellow”)#定義按鈕1B1.grid(row=0,column=0)#按鈕1放置在0行0列3.place布局允許指定組件的大小與位置。place的優(yōu)點是可以精確控制組件的位置,缺點是改變窗口大小時,子組件不能隨之靈活改變。
使用place方法的x、y參數(shù),定義組件左上角的絕對坐標
Python的坐標系是左上角為原點(0,0)位置,向右是x坐標正方向,向下是y坐標正方向例如:#定義“用戶名”標簽,在絕對坐標(1,10)顯示Label(root,text="用戶名",width=6).place(x=1,y=10)#定義單行文本框,在絕對坐標(45,10)顯示Entry(root,width=20).place(x=45,y=10)
2.4.3Tkinter組件Button命令按鈕Canvas畫布組件,提供繪圖功能,包括直線、矩形、橢圓、位圖等Checkbutton復(fù)選框組件,供用戶勾選Entry單行文本框組件,供用戶輸入簡單內(nèi)容并可查看Frame框架組件,在屏幕上顯示一個矩形區(qū)域,作為容器裝載其他組件Label標簽,用來顯示文本或位圖Listbox列表框組件,列出多個選項,供用戶選擇Menu菜單組件,可以顯示菜單欄,下拉菜單和彈出菜單Menubutton菜單按鈕組件,用于顯示菜單項Message消息框組件,用來顯示多行文本,與label比較類似Radiobutton單選按鈕組件Scale滑動條組件,拖動滑塊在起始值和結(jié)束值之間選擇精確值Scrollbar滾動條,為組件(畫布、列表框、文本框等)提供滾動能力.Text多行文本框LabelFrame容器組件,類似于Frame,支持添加標題tkMessageBox消息框組件,有多種類型TreeView樹形列表組件,展示樹型結(jié)構(gòu)或列表結(jié)構(gòu)可以通過下列方式之一設(shè)置組件對象的屬性:btn1=Button(root,text="確定") #通過組件的構(gòu)造函數(shù),進行text屬性傳參btnl.config(text=“確定”)
#通過組件對象的config方法btnl[“text”]=“確定”
#為組件對象的屬性賦值,以修改字典元素的方式單行文本框組件Entry主要用于輸入單行內(nèi)容和顯示文本(1)創(chuàng)建和顯示Entry實例對象Entry對象=Entry(父容器對象)#父容器對象可以是root(主窗口),也可以是其他容器Entry對象.pack()#使用pack布局,還可以使用grid或place布局(2)使用StringVar變量綁定Entry對象可以通過StringVar的set方法或get方法設(shè)置或獲取Entry對象的內(nèi)容?!纠?-19】使用Entry組件創(chuàng)建一個能進行溫度轉(zhuǎn)換的GUI程序。fromtkinterimport*root=Tk()root.title("溫度轉(zhuǎn)換")root.geometry("300x100")l1=Label(root,text="請輸入攝氏溫度值:") #創(chuàng)建標簽l1l1.pack() #顯示標簽l1x=StringVar() #x是StringVar變量Entry(root,textvariable=x,width=30).pack() #創(chuàng)建文本框,與x通過textvariable屬性綁定btn1=Button(root,text="轉(zhuǎn)換",width=10) #創(chuàng)建按鈕btn1,標題文字是“轉(zhuǎn)換”btn1.pack() #顯示btn1deftempConvert(event):#定義“溫度轉(zhuǎn)換”函數(shù)a=x.get() #通過x的get方法獲得用戶在文本框內(nèi)的輸入b=str(1.8*float(a)+32)+"F"l1["text"]=a+"C="+b #修改標簽l1的顯示內(nèi)容btn1.bind("<Button-1>",tempConvert)#將按鈕的鼠標單擊事件與“溫度轉(zhuǎn)換”函數(shù)進行事件綁定root.mainloop()列表框組件Listbox列表框組件Listbox用于顯示多個項目,并且允許用戶選擇一個或多個項目常用方法:(1)插入文本項:Listbox對象.insert(index,item)index是END表示在列表框尾部插入項(2)返回選中項的索引:Listbox對象.curselection()將得到選中項目的索引,元組類型(3)刪除文本項:Listbox對象.delete(first,last)(4)獲取項目內(nèi)容:Listbox對象.get(index)樹形列表組件TreeviewTkinter模塊的子模塊ttk中的TreeView組件,是一個用來展示樹形結(jié)構(gòu)或列表結(jié)構(gòu)的圖形組件importtkinterastkimporttkinter.ttkroot=tk.Tk()root.geometry('320x200+200+200')columnname=['姓名','數(shù)學(xué)','語文','英語']tv=tk.ttk.Treeview(root,columns=columnname,show="headings",height=5)foriinrange(4):tv.column(columnname[i],width=70,anchor='w')tv.heading(columnname[i],text=columnname[i])tv.pack()root.mainloop()2.4.4Python事件處理一個Python圖形界面程序在運行時一直處于消息循環(huán)(eventloop)中,它等待事件發(fā)生,并做出相應(yīng)的處理。例如程序運行時,用戶敲擊鍵盤上某一個鍵或是單擊、移動鼠標,對于這些事件,程序需要做出反應(yīng)。Tkinter提供的組件通常都有自己可以識別的事件。程序可以使用事件處理函數(shù)來指定當(dāng)觸發(fā)某個事件時所做的反應(yīng)(操作)事件類型包括鼠標事件、鍵盤事件、窗體事件等事件處理函數(shù)可以被綁定給各個對象的各種事件事件綁定方式:(1)通過組件的command屬性綁定(2)通過實例的bind方法綁定defcallback(): #事件處理函數(shù)
showinfo("Pythoncommand","人生苦短、我用Python")Btn1=Button(root,text="設(shè)置command事件調(diào)用命令",command=callback)Btn1.pack()fromtkinterimport*fromtkinter.messageboximport*root=Tk()root.geometry("320x200+200+200")defsayhello(e):showinfo("info","hello")btn1=Button(root,text="你好")btn1.pack()btn1.bind("<Button-1>",sayhello)root.mainloop()2.5常用格式文件操作2.5.1操作CSV格式文件CSV文件(Comma-SeparatedValues逗號分隔值),其文件以純文本形式存儲表格數(shù)據(jù)。CSV文件由任意數(shù)量的記錄組成,記錄間以換行符分隔,每條記錄由字段組成,字段間的分隔符常見的是逗號或制表符。例如:序號,姓名,年齡3,張海峰,254,李偉,385,趙大強,36……【例2-26】直接讀取CSV格式文件到二維列表。以上代碼將CSV文件中的每一行轉(zhuǎn)換成一個一維列表,多行數(shù)據(jù)就組成多個一維列表,多個一維列表構(gòu)成二維列表。類似于:myfile=open('test2.csv','r') #以只讀方式打開文件ls=[]forlineinmyfile: #通過循環(huán)按行讀取文件line=line.replace('\n','') #去掉換行符ls.append(line.split(',')) #將一行中以','分隔的多個數(shù)據(jù)轉(zhuǎn)換成列表的數(shù)據(jù)元素print(ls)myfile.close()#關(guān)閉文件[['序號','姓名','年齡'],['3','張海峰','25'],['4','李偉','38'],['5','趙大強','36']]【例2-27】將二維列表寫入CSV格式文件。此外,還可以使用CSV模塊讀寫CSV文件,操作方法更直接、簡單myfile=open('test2new.csv','w')#以覆蓋寫模式打開文件(文件不存在則新建)ls=[['序號','姓名','年齡'],['3','張海峰','25'],['4','李偉','38'],['5','趙大強','36'],['6','程海鵬','28']]forlineinls:#逐個遍歷外層列表元素myfile.write(','.join(line)+"\n")#在同一行的數(shù)據(jù)元素之間加上逗號間隔,在行尾添加換行符myfile.close()2.5.2操作Excel文檔xlrd和xlwt是兩個第三方模塊,分別用來讀和寫Excel,支持.xls和.xlsx格式的Excel文檔。1.使用xlrd模塊讀取Excelxlrd提供的接口比較多,常用的如下:open_workbook()打開指定的Excel文件,返回一個Book工作簿對象,例如data=xlrd.open_workbook(‘excelFile.xls’)#打開指定名稱的Excel文件①Book工作簿對象通過Book工作簿對象可以得到各個Sheet工作表對象(一個Excel文件可以有多個Sheet,每個Sheet就是一張表格)。Book工作簿對象屬性和方法:Book.nsheets返回Sheet的數(shù)目Book.sheets()返回所有Sheet對象的listBook.sheet_by_index(index)返回指定索引的Sheet,相當(dāng)于Book.sheets()[index]例如:table=data.sheets()[0]#通過索引獲取Sheet②Sheet工作表對象通過Sheet對象可以獲取各個單元格,每個單元格是一個Cell對象。Sheet對象對象屬性和方法:S返回表格的名稱Sheet.nrows返回表格的行數(shù)Sheet.ncols返回表格的列數(shù)Sheet.cell(r,c)根據(jù)位置獲取Cell對象Sheet.cell_value(r,c)根據(jù)位置獲取Cell對象的值。例如:cell_A1=table.cell(0,0).value#獲取A1單元格的值cell_C4=table.cell(2,3).value#獲取C4單元格的值2.使用xlwt模塊寫ExcelWorkbook()是構(gòu)造函數(shù),返回一個工作簿對象Workbook.add_sheet(name)添加了一個名為name的表,類型為WorksheetWorkbook.get_sheet(index)可以根據(jù)索引返回WorksheetWorksheet.write(r,c,value)是將value填充到指定單元格位置Worksheet.row(n)返回指定的行Workshee
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年四川商務(wù)職業(yè)學(xué)院單招職業(yè)技能考試題庫及參考答案詳解1套
- 2026年新疆農(nóng)業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及參考答案詳解1套
- 2026年大慶醫(yī)學(xué)高等專科學(xué)校單招職業(yè)傾向性測試題庫及參考答案詳解一套
- 南昌社工面試題目及答案
- 公務(wù)員晉職面試題及答案
- 廉江事業(yè)編面試題及答案
- 2025~2026學(xué)年濟南天橋區(qū)濼口實驗學(xué)校九年級上學(xué)期12月份英語考試試卷以及答案
- 2025年陸軍軍醫(yī)大學(xué)西南醫(yī)院護士長招聘備考題庫及參考答案詳解1套
- 2025年茂名市電白區(qū)電城中學(xué)招聘合同制教師備考題庫及一套答案詳解
- 隨州市中心醫(yī)院2026年招聘45人備考題庫附答案詳解
- 醫(yī)院信息科述職報告
- 紫外線燈管的使用和維護
- 危重患者安全防范措施
- 臨床課程思政
- 2024年7月國家開放大學(xué)法律事務(wù)專科《刑事訴訟法學(xué)》期末考試試題及答案
- 《光伏組件用聚酯與聚烯烴彈性體多層復(fù)合膠膜》
- 化學(xué)實驗室安全操作考核試卷
- 裝修電子合同范例
- 配電線路巡視培訓(xùn)
- “十四五”數(shù)字經(jīng)濟發(fā)展規(guī)劃解讀與數(shù)字經(jīng)濟技術(shù)新趨勢
- DB11T 1230-2015 射擊場設(shè)置與安全要求
評論
0/150
提交評論