午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

 老三的休閑書屋 2021-04-04

本節(jié)知識大綱:

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

本節(jié)知識框架

Python里的圖形化界面(GUI)模塊主要有Tkinter(python自帶)、PyQt、wxPython,我們這節(jié)主要講解Tkinter組件:

一、Tkinter介紹

tkinter模塊只要用戶安裝好Python環(huán)境就可以直接使用;

1. 第一個tkinter程序

import tkinter as tk  # 給tkinter重命名為tkroot = tk.Tk()  # 新建一個窗體root.mainloop()  # 展示窗體

2. 設(shè)置屬性并添加控件

設(shè)置窗體標(biāo)題、指定窗體大小、添加按鈕、輸入框、標(biāo)簽并布局

import tkinter as tk  root = tk.Tk()# 為窗體設(shè)置一個標(biāo)題root.title('第一個tkinter窗體')# 指定窗體的大小,這里的乘號是小寫字母xroot.geometry('400x300')# 添加一個標(biāo)簽Label01 = Label(root,text = '第一個label標(biāo)簽')# 將標(biāo)簽布局到窗體上Label01.pack() # 添加一個按鈕,可以在創(chuàng)建按鈕的同時在句尾調(diào)用pack語句進行布局Button01 = Button(root,text = '確定').pack()# 添加一個單行文本框Entry01 = Entry(root).pack()# 展示窗體root.mainloop()

二、控件的屬性

1. tkinter常用的控件屬性

(1)定義控件的名稱使用參數(shù)text,傳入的字符串值即為控件的名稱;

(2)定義控件高度使用參數(shù)hight,寬度使用參數(shù)width,傳入的值為整形數(shù)值;

(3)定義控件在空間中的位置,使用參數(shù)anchor,傳入的字符參數(shù)為e、s、w、n以地圖的東南西北來定義為右下左上,也可以同時設(shè)置左下sw、左上nw、右下se、右上ne;

(4)定義控件的背景色,使用參數(shù)bg,前景色使用參數(shù)fg,傳入字符值可以直接是對應(yīng)顏色的英文名稱;

(5)設(shè)置布局在pack()函數(shù)里,使用參數(shù)side,傳入的值為常量tk.LEFT或者tk.RIGHT,表示從左到右或者從右到左布局

(6)創(chuàng)建圖片控件時,圖片控件的文件源使用參數(shù)file,傳入的字符值為為文件路徑,在控件中使用圖片則使用參數(shù)image,傳入的值為圖片控件變量;

(7)設(shè)置整個窗體的尺寸,使用參數(shù)geometry,傳入的值為字符值,注意乘號用小寫字母x代替;如果要設(shè)置長400寬300的窗體則使用語句geometry = '400x300'

(8)設(shè)置控件與邊界的距離在pack函數(shù)里使用參數(shù)padx,設(shè)置左右距離;使用pady設(shè)置上下距離。

2. 案例演示:畫出一個簡單的窗體布局

import tkinter as tk# 新建一個窗體名稱:rootroot = tk.Tk()# 為窗體添加一個標(biāo)題root.title('第二個Python窗體')# 新建標(biāo)簽photo = tk.PhotoImage(file = '/Users/yushengtan/Desktop/image.png')Label01 = tk.Label(root,text = '第一個Label標(biāo)簽',anchor = 'se').pack(side = tk.LEFT)imageLable01 = tk.Label(root,image = photo).pack(side = tk.LEFT)Label02 = tk.Label(root,text = '第二個Label標(biāo)簽',bg = 'blue',fg = 'white',font = ('華文宋體',20)).pack()Label03 = tk.Label(root,text = '第三個Label標(biāo)簽',).pack()Label04 = tk.Label(root,text = '第四個Label標(biāo)簽').pack()Label05 = tk.Label(root,text = '第五個Label標(biāo)簽').pack()Button01 = tk.Button(root,text = '確定').pack()# 顯示root.mainloop()

效果演示:

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

簡單窗體布局

3. 案例演示:畫出能計算加法的計算器界面

# 導(dǎo)包的時候使用*,創(chuàng)建控件的時候不用寫類名了from tkinter import *# 創(chuàng)建一個窗體,名稱為rootroot = Tk()# 為窗體添加標(biāo)題root.title('求兩數(shù)之和')root.geometry('700x80')photo = PhotoImage(file = '/Users/yushengtan/Desktop/calc.png')# 定義控件PhotoLabel = Label(root,image = photo).pack(side = LEFT,padx = 10,pady = 5)# 第一個數(shù)字文本框Entry01 = Entry(root,bg = 'pink',width = 10,font = ('華文黑體',20)).pack(side = LEFT,padx = 5,pady = 5)# 加號Label_plus = Label(root,text = '+',font = ('華文黑體',20)).pack(side = LEFT,padx = 5,pady = 5)# 第二個數(shù)字文本框Entry02 = Entry(root,bg = 'pink',width = 10,font = ('華文黑體',20)).pack(side = LEFT,padx = 5,pady = 5)# 等于號Label_equal = Label(root,text = '=',font = ('華文黑體',20)).pack(side = LEFT,padx = 5,pady = 5)# 第三個數(shù)字文本框Entry03 = Entry(root,bg = 'green',width = 10,font = ('華文黑體',20)).pack(side = LEFT,padx = 5,pady = 5)Button01 = Button(root,text = '計算',width = 10,height = 2,font = ('華文黑體',15)).pack(side = LEFT,padx = 10,pady = 5)# 運行root.mainloop()

界面效果:

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

三、基本布局

1. place絕對布局

pack布局是按順序布局,而place布局可以直接定義絕對位置,只需要給place()函數(shù)里傳入兩個參數(shù)x和y,其值為整型數(shù)值表示相對于窗體左上角的坐標(biāo)位置;用法:place(x=10,y=20)

案例演示:

繪制一個簡易的登錄界面

from tkinter import *root = Tk()root.title('用戶登錄')root.geometry('400x180')Label_username = Label(root,text = '登錄名:',font = ('華為黑體',16)).place(x = 50,y = 20)Entry_username = Entry(root,font = ('華文黑體',16),width = 20).place(x = 120,y = 20)Label_password = Label(root,text = '密   碼:',font = ('華為黑體',16)).place(x = 50,y = 60)Entry_password = Entry(root,font = ('華文黑體',16),width = 20).place(x = 120,y = 60)Button_login = Button(root,text = '登錄',font = ('華文黑體',16),width = 8).place(x = 70,y = 120)Button_cancer = Button(root,text = '取消',font = ('華文黑體',16),width = 8).place(x = 210,y = 120)root.mainloop()

運行效果:

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

2. grid表格布局

grid是一種網(wǎng)格布局,grid(row = 1,column = 2),n行n列分別表示表格的行數(shù)和列數(shù),從0開始計數(shù);可以使用參數(shù)sticky控制控件靠近單元格的位置,字符值可以給出n、s、w、e設(shè)置上、下、左、右,我們還是以登錄窗體為例:

# grid窗體布局from tkinter import *root = Tk()root.title('用戶登錄')root.geometry('450x160')# 表格圖片photo = PhotoImage(file = '/Users/yushengtan/Desktop/login.png')img_label = Label(root,image = photo).grid(row = 0,column = 0,rowspan = 2)# 第一行 第二列Label_username = Label(root,text = '用戶名:',font = ('華文黑體',16)).grid(row = 0,column = 1)# 第一行 第三列Entry_username = Entry(root,font = ('華文黑體',16)).grid(row =0,column = 2)# 第二行 第二列Label_password = Label(root,text = '密  碼:',font = ('華文黑體',16)).grid(row = 1,column = 1)# 第二行 第三列Entry_password = Entry(root,font = ('華文黑體',16)).grid(row =1,column = 2)# 第四行 第二列Button_login = Button(root,text = '登錄',width = 8,font = ('華文黑體',16)).grid(row = 3,column = 2,sticky = 'e')# 第四行 第三列Button_cancer = Button(root,text = '取消',width = 8,font = ('華文黑體',16)).grid(row =3,column = 2,sticky = 'w')root.mainloop()

輸出效果:

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter


注意:紅色輔助線幫助理解表格布局,實際運行效果沒有輔助線

四、使用類封裝GUI

這里我們使用類來封裝GUI程序,以至于我們后面需要調(diào)用的時候直接實例化一個對象就可以產(chǎn)生一個窗口,類與對象的知識我們后面會深入講解,現(xiàn)在我們只需怎么使用即可;我們把前面的登錄窗口通過類來進行封裝

from tkinter import *class login_GUI(object):    def __init__(self):        '''        窗體的構(gòu)造函數(shù),用來做界面的初始化,GUI代碼放在此函數(shù)中        '''        self.frame = Tk()        self.frame.title('登錄窗體')        self.frame.geometry('400x160')        self.photo = PhotoImage(file='/Users/yushengtan/Desktop/login.png')        imgLabel = Label(self.frame, image=self.photo).grid(row=0, column=0, rowspan=2)        # 第一行 第一列        Label_username = Label(self.frame, text='用戶名:', font=('微軟雅黑'14)).grid(row=0, column=1)        # 第一行 第二列        Entry_username = Entry(self.frame, font=('華文黑體'16)).grid(row=0, column=2)        # 第二行 第二列        Label_password = Label(self.frame, text='密  碼:', font=('華文黑體'16)).grid(row=1, column=1)        # 第二行 第三列        Entry_password = Entry(self.frame, font=('華文黑體'16)).grid(row=1, column=2)        # 第四行 第二列        Button_login = Button(self.frame, text='登錄', width=8, font=('華文黑體'16)).grid(row=3, column=2, sticky='e')        # 第四行 第三列        Button_cancer = Button(self.frame, text='取消', width=8, font=('華文黑體'16)).grid(row=3, column=2, sticky='w')    def run(self):        self.frame.mainloop()if __name__ == '__main__':    # 由窗體的模板實例化一個具體的登錄窗體    this_login = login_GUI()    # 展示窗體    this_login.run()

五、響應(yīng)事件

以上我們實現(xiàn)了GUI界面的設(shè)計,加法計算器、登錄窗口,但是沒有程序并不能工作,如果想要程序工作起來還得給控件設(shè)置響應(yīng)事件;事件是什么呢?事件就是響應(yīng)某一個動作,如點擊某一個按鈕、輸入鍵盤的某一個鍵等等。我們現(xiàn)在來完善前面設(shè)計加法計算器,讓其能真正做加法計算;

1. 完成點擊按鈕響應(yīng)事件的步驟

(1)完成時間的功能---函數(shù)

(2)把功能捆綁到按鈕上,添加command參數(shù),其值為功能函數(shù)名,注意沒有小括號,這一點非常重要,很多時候出錯了,都不知道錯在哪了,就是因為不小心加了括號!

注意:取出文本框的數(shù)值可以使用get()方法,設(shè)置文本框的數(shù)值可以使用set()方法;控件基本屬性的設(shè)定和控件的布局語句要分開;

2. 案例:實現(xiàn)兩數(shù)相加的功能

通過響應(yīng)事件完成加法計算器

# 實現(xiàn)加法計算器的的GUI界面from tkinter import *from tkinter.messagebox import  *# 寫一個類:實現(xiàn)兩數(shù)相加的頁面和功能class get_sum(object):    def __init__(self):        # 新建一個窗體        self.frame = Tk()        # 窗體添加標(biāo)題        self.frame.title('實現(xiàn)兩數(shù)相加')        self.frame.geometry('700x80')        self.photo = PhotoImage(file='/Users/yushengtan/Desktop/calc.png')        # 定義控件        self.img_Label = Label(self.frame, image=self.photo)        self.img_Label.pack(side=LEFT, padx=10, pady=5)        # 第一個數(shù)字文本框        self.num01_Entry = Entry(self.frame, bg='pink', width=10, font=('華文黑體'20))        self.num01_Entry.pack(side=LEFT, padx=5, pady=5)        # 加號        self.Label01 = Label(self.frame, text='+', font=('華文黑體'20))        self.Label01.pack(side=LEFT, padx=5, pady=5)        # 第二個數(shù)字文本框        self.num02_Entry = Entry(self.frame, bg='pink', width=10, font=('華文黑體'20))        self.num02_Entry.pack(side=LEFT, padx=5, pady=5)        # 等于號        self.Label02 = Label(self.frame, text='=', font=('華文黑體'20))        self.Label02.pack(side=LEFT, padx=5, pady=5)        # 第三個數(shù)字文本框        self.var = StringVar()        self.result_Entry = Entry(self.frame, bg='green', width=10, font=('華文黑體'20),textvariable = self.var)        self.result_Entry.pack(side=LEFT, padx=5, pady=5)        self.cal_Button = Button(self.frame, text='計算', width=10, height=2, font=('華文黑體'15),command = self.cal_sum)        self.cal_Button.pack(side=LEFT, padx=10, pady=5)    # 展示窗體    def run(self):        self.frame.mainloop()    # 實現(xiàn)兩數(shù)相加    def cal_sum(self):        # 先取出字符串        num01 = self.num01_Entry.get()        num02 = self.num02_Entry.get()        # 判斷        if num01.isdigit() and num02.isdigit():            self.var.set(str(int(num01) + int(num02)))        else:            showinfo('系統(tǒng)提示','輸入的值不都是數(shù)字無法計算')

運行效果

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

3. 案例:實現(xiàn)用戶登錄功能

需求

(1)如果用戶名為admin,密碼為123.com,顯示登錄成功!

(2)如果用戶名不對,顯示用戶名不存在;

(3)如果密碼不對,顯示密碼錯誤,如果錯誤三次,提示:賬號已鎖定。

提示:實現(xiàn)窗體的關(guān)閉,可以使用方法self.frame.destory()關(guān)閉窗體;

# 用戶登錄from tkinter import *from tkinter.messagebox import *class login_GUI(object):    def __init__(self):        '''        窗體的構(gòu)造函數(shù),用來做界面的初始化,GUI代碼放在此函數(shù)中        '''        self.frame = Tk()        self.frame.title('登錄窗體')        self.frame.geometry('400x160')        self.photo = PhotoImage(file='/Users/yushengtan/Desktop/login.png')        self.imgLabel = Label(self.frame, image=self.photo)        self.imgLabel.grid(row=0, column=0, rowspan=2)        # 第一行 第一列        self.Label_username = Label(self.frame, text='用戶名:', font=('微軟雅黑'14))        self.Label_username.grid(row=0, column=1)        # 第一行 第二列        self.Entry_username = Entry(self.frame, font=('華文黑體'16))        self.Entry_username.grid(row=0, column=2)        # 第二行 第二列        self.Label_password = Label(self.frame, text='密  碼:', font=('華文黑體'16))        self.Label_password.grid(row=1, column=1)        # 第二行 第三列        self.Entry_password = Entry(self.frame, font=('華文黑體'16))        self.Entry_password.grid(row=1, column=2)        # 第四行 第二列        self.Button_login = Button(self.frame, text='登錄', width=8, font=('華文黑體'16),command = self.login)        self.Button_login.grid(row=3, column=2, sticky='e')        # 第四行 第三列        self.Button_cancer = Button(self.frame, text='取消', width=8, font=('華文黑體'16),command = self.cancer)        self.Button_cancer.grid(row=3, column=2, sticky='w')        # 定義全局變量        self.password_error_times = 0        self.is_disable = False    def run(self):        self.frame.mainloop()    def login(self):        # 【1】先獲取用戶名和密碼        username = str(self.Entry_username.get())        password = str(self.Entry_password.get())        # 【2】驗證        if username.strip().lower() != 'admin':            showinfo('系統(tǒng)消息','用戶名不存在,請核實后再登錄!')        elif password.strip() != '123.com':            self.password_error_times += 1            # 判斷是否達到三次            if self.password_error_times >= 3:                self.is_disable = True            # 判斷禁用標(biāo)志            if self.is_disable:                showinfo('系統(tǒng)消息','密碼輸入錯誤已達三次,賬號已鎖定,請聯(lián)系管理員')            else:                showinfo('系統(tǒng)消息''密碼錯誤!')        else:            showinfo('系統(tǒng)消息','登錄成功')            # 如果在3次以內(nèi)輸入正確,則錯誤次數(shù)計數(shù)歸零            self.password_error_times = 0    def cancer(self):        # 實現(xiàn)窗體的關(guān)閉        self.frame.destroy()if __name__ == '__main__':    # 由窗體的模板實例化一個具體的登錄窗體    this_login = login_GUI()    # 展示窗體    this_login.run()

演示效果

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

六、GUI擴展功能

1. ttk模塊

ttk模塊是對傳統(tǒng)tkinter模塊的增強,傳統(tǒng)的tkinter模塊界面比較單一,控件種類有限,界面布局邏輯性差。ttk模塊是tkinter下的一個子模塊,它的界面比tkinter更豐富更美觀。ttk的用法同tkinter大體相同,但是有一些屬性ttk不再支持,而tkinter中的fg、bg、font屬性在ttk中不再被支持,取而代之的是style對象;

2. 復(fù)選框Checkbutton

# Checkbutton控件from tkinter import *# from tkinter.ttk import *from tkinter.messagebox import *# 新建一個窗體還是需要tkinterroot = Tk()root.geometry('450x100')root.title('CheckButton控件')#Label標(biāo)簽Label01 = Label(root,text = '請選擇你去過的城市')Label01.grid(row = 0,column = 0,padx = 0,pady = 20)city_list = ['北京','上海','廣州','深圳','南京']# 用一組值存儲選中哪些is_check_list = []# 通過循環(huán)展示for city in city_list:    is_check_list.append(IntVar())    CheckButton01 = Checkbutton(root,text=city,variable = is_check_list[-1])    # 為啥是-1    CheckButton01.grid(row = 0,column = len(is_check_list),padx = 5,pady = 5)# sel函數(shù)def sel():    all_select = ''    for i in range(0,len(is_check_list)):        if is_check_list[i].get() == 1:            all_select += city_list[i] + ' '    Label_select['text'] = '所選城市為:'+all_select# 添加一個ButtonButton01 = Button(root,text = '確認選擇',command = sel)Button01.grid(row = 1,column = 0,padx = 5,pady = 5)# 添加一個Label標(biāo)簽,用于展示顯示后的結(jié)果Label_select = Label(root,text = '')Label_select.grid(row = 1,column = 1,columnspan = 5)# 加載root.mainloop()

演示效果

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

3. 單選框Radiobutton

# RadioButtonfrom tkinter import *# from tkinter.ttk import *# radiobutton --- 單選框----多個值中只能選一個root = Tk()root.title('RadioButton組件')root.geometry('400x100')def sel_gender():    if gender_check.get() == 1:        Label_select_gender['text'] = '男'    else:        Label_select_gender['text'] = '女'def sel_education():    Label_select_education['text'] = education_list[int(education_check.get())]# 性別單選Label_gender = Label(root,text = '性別:')Label_gender.grid(row = 0,column = 0,padx = 5,pady = 5)gender_check = IntVar()# 用哪個變量接收它是否被選中,variable,綁定的值是同一個表示一組,variable通過get方法能獲得value的值# 最終選中后取什么值: value,同一組radiobutton中value的值最好是不同的# 性別的單選radio_boy = Radiobutton(root,text = '男',variable = gender_check,value = 1,command = sel_gender)radio_boy.grid(row = 0,column = 1,padx = 5,pady = 5)radio_boy = Radiobutton(root,text = '女',variable = gender_check,value = 0,command = sel_gender)radio_boy.grid(row = 0,column = 2,padx = 5,pady = 5)# 學(xué)歷education_list = ['高中','???,'本科','碩士','博士']Label_education = Label(root,text = '學(xué)歷:')Label_education.grid(row = 1,column = 0,padx = 5,pady = 5)education_check = IntVar()for i in range(0,len(education_list)):    radio = Radiobutton(root,text = education_list[i],variable = education_check,value = i,command = sel_education)    radio.grid(row = 1,column = i + 1,padx = 5,pady = 5)Label01 = Label(root,text = '所選的值為:')Label01.grid(row = 2 , column = 0)Label_select_gender = Label(root,text = '')Label_select_gender.grid(row = 2 , column = 1)Label_select_education = Label(root,text = '')Label_select_education.grid(row = 2 , column = 2)# 展示控件root.mainloop()

演示效果

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

4. 下拉框ComboBox

# ComboBoxfrom tkinter import *from tkinter.ttk import *# ComboBox 控件 --- 下拉框單選root = Tk()root.title('ComboBox控件')root.geometry('400x100')# 做下拉選擇的時候定義函數(shù)一定要使用可變長參數(shù)def sel_gender(*args):    Label_select_gender['text'] = combo_gender.get()def sel_education(*args):    Label_select_education['text'] = combo_education.get()# 性別單選Label_gender = Label(root,text = '性別')Label_gender.grid(row = 0,column = 0,padx = 5,pady = 5)gender = StringVar()combo_gender = Combobox(root,textvariable = gender)combo_gender['values'] = ['男','女']  # 下拉列表填充combo_gender['state'] = 'readonly'  # 只允許讀,如果沒有這個參數(shù),輸入框可以輸入值combo_gender.current(0) # 默認情況下選擇的值的索引combo_gender.grid(row = 0 ,column = 1)# 學(xué)歷單選education_list = ['高中','???,'本科','碩士','博士']Label_education = Label(root,text = '學(xué)歷:')Label_education.grid(row = 1,column = 0)education = StringVar()combo_education = Combobox(root,textvariable = education,values = education_list)combo_education['state'] = 'readonly'combo_education.current(0)combo_education.grid(row = 1,column = 1)# 綁定選擇性別的事件combo_gender.bind('<<ComboboxSelected>>',sel_gender)# 綁定選擇學(xué)歷的事件combo_education.bind('<<ComboboxSelected>>',sel_education)# 獲取結(jié)果:Label01 = Label(root,text = '所選的值為:')Label01.grid(row = 2 , column = 0)Label_select_gender = Label(root,text = '')Label_select_gender.grid(row = 2,column = 1,sticky = 'e')Label_select_education = Label(root,text = '')Label_select_education.grid(row = 2,column = 2,sticky = 'w')# 窗體展示root.mainloop()

效果演示

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

5. 容器LabelFrame

把具有相同功能的模塊組合在一起,并且加上一個名字,這個控件能讓你的界面更加有條理

# LabelFramefrom tkinter import *from tkinter.ttk import *root = Tk()root.title('LabelFrame控件')LabelFrame_query = LabelFrame(root,text = '學(xué)生信息查詢')LabelFrame_query.pack(padx = 10,pady = 10)# 如果不加控件的話,LabelFrame是看不見的Label01 = Label(LabelFrame_query,text = '學(xué)號')Label01.pack(side = LEFT,padx = 5,pady = 5)Entry01 = Entry(LabelFrame_query,width = 10)Entry01.pack(side = LEFT,padx = 5,pady = 5)Label02 = Label(LabelFrame_query,text = '姓名')Label02.pack(side = LEFT,padx = 5,pady = 5)Entry02 = Entry(LabelFrame_query,width = 10)Entry02.pack(side = LEFT,padx = 5,pady = 5)Label03 = Label(LabelFrame_query,text = '班級')Label03.pack(side = LEFT,padx = 5,pady = 5)Entry03 = Entry(LabelFrame_query,width = 10)Entry03.pack(side = LEFT,padx = 5,pady = 5)Button01 = Button(LabelFrame_query,text = '查詢',width = 5)Button01.pack(side = LEFT,padx = 15,pady = 5)root.mainloop()

運行效果

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

6. 樹狀視圖TreeView

# Treeview控件from tkinter import *from tkinter.ttk import *root = Tk()root.title('TreeView模塊')root.geometry('440x225')# frame容器放置表格frame01 = Frame(root)frame01.place(x = 10,y = 10,width =420,height = 220 )# 加載滾動條scrollBar = Scrollbar(frame01)scrollBar.pack(side = RIGHT,fill = Y)# 準(zhǔn)備表格TreeViewtree = Treeview(frame01,columns = ('學(xué)號','姓名','性別','年齡','手機號'),show = 'headings',yscrollcommand = scrollBar.set)# 設(shè)置每一列的寬度和對齊方式tree.column('學(xué)號',width = 80,anchor = 'center')tree.column('姓名',width = 80,anchor = 'center')tree.column('性別',width = 60,anchor = 'center')tree.column('年齡',width = 60,anchor = 'center')tree.column('手機號',width = 120,anchor = 'center')# 設(shè)置表頭的標(biāo)題文本tree.heading('學(xué)號',text = '學(xué)號')tree.heading('姓名',text = '姓名')tree.heading('性別',text = '性別')tree.heading('年齡',text = '年齡')tree.heading('手機號',text = '手機號')# 設(shè)置關(guān)聯(lián)scrollBar.config(command = tree.yview)# 加載表格信息tree.pack()# 插入數(shù)據(jù)for i in range(10):    # i 是索引    tree.insert('',i,values=['9500'+str(i),'張三','男','23','15622338793'])# 展示root.mainloop()

運行效果:

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

7. Style屬性

增強的ttk包里沒法用tkinter的傳統(tǒng)屬性進行設(shè)置比如bg和fg,我們需要通過style對象來對其設(shè)置;注意:我們對實例化對象style01進行配置,

style01.configure('TLabel',font = ('華文黑體',18),background = 'green',foreground = 'blue')

第一個參數(shù)不是對象的名稱,而是對象的某一類,其名稱是有規(guī)定的,不是隨便取的,由于這里是對Label 的style進行命令,所以我們只能命名成TLabel,具體的組件與名稱的對應(yīng)關(guān)系如下:

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

Style對象名稱


疑問
如果此時創(chuàng)建一個Label02對象它的style屬性沒有綁定style01對象,但是它的屬性依然是style01對象里定義的特征,這是怎么回事呢?
解答
其實只要在配置style的時候,填寫標(biāo)準(zhǔn)的Stylename,后面無論某個控件是否綁定,Stylename 對應(yīng)的控件都會生效;

from tkinter import *from tkinter.ttk import *root = Tk()root.title('style屬性')root.geometry('300x200')# 實例化一個style對象style01style01 = Style()# 對style01進行配置,Stylename屬性設(shè)置為標(biāo)準(zhǔn)的TLablestyle01.configure('TLabel',font = ('華文黑體',18),background = 'green',foreground = 'blue')# 把Label01控件綁定給style01對象Label01 = Label(root,text = '用戶名',style = 'TLabel')Label01.pack(padx = 10,pady = 10)Label02 = Label(root,text = '密碼')Label02.pack(padx = 10,pady = 10)# 展示窗體root.mainloop()

效果演示

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter

拓展:如果只想對某類中的某些控件生效,那么就必須要使用custom.Stylename格式來進行命名;如我創(chuàng)建的style01的Stylename名稱是username.TLabel,這里的username是自定義字段,那么后面的Label控件如果沒有指定style是username.TLabel就不會具有style01的屬性

from tkinter import *from tkinter.ttk import *root = Tk()root.title('style屬性')root.geometry('300x200')# 實例化一個style對象style01style01 = Style()# 對style01進行配置,Stylename屬性設(shè)置為password.TLablestyle01.configure('password.TLabel',font = ('華文黑體',18),background = 'green',foreground = 'blue')# 把Label01控件綁定給style01對象Label01 = Label(root,text = '用戶名',style = 'password.TLabel')Label01.pack(padx = 10,pady = 10)Label02 = Label(root,text = '密碼')Label02.pack(padx = 10,pady = 10)# 展示窗體root.mainloop()

這樣控件的顯示效果如下:

Python基礎(chǔ)學(xué)習(xí)筆記(十三)圖形化界面Tkinter


這樣就能使具體某一個組件生效,這樣就能做到既能控制全局保持整體的統(tǒng)一,又能對具體某一類或者某一個特別對待,這種機制就很棒!
好啦,關(guān)于Tkinter的基礎(chǔ)知識點就介紹到這里啦!如果覺得文章還不錯的話,歡迎點贊關(guān)注,感謝你的支持^-^

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約