tkinter的簡介
tkinter 是 Python 的標準 GUI 庫。它基於 Tk 工具包,該工具包最初是爲工具命令語言(Tool Command Language,Tcl)設計的。Tk 普及後,被移植到很多其他的腳本語言中,包括 Perl,Ruby 和 Python。結合 Tk 的可移植性與靈活性,以及與系統語言功能集成的腳本語言的簡潔性,可以快速開發 GUI 應用程序
對於gui編程我是這樣理解的, 我們小時候都玩過積木,只要發揮創意,相同的積木可以堆出各種造型。tkinter的組件也可以看做一個個積木,形狀或許不同,其本質都是一樣的,就是一個積木,不管它長什麼樣子,它始終就是積木!我們主要學習他如何使用,如何放置,至於積木如何製作出來的不用管。
GUI編程步驟
創建gui程序的步驟
創建一個 GUI 應用程序需要以下 5 個主要步驟。
- 導入 tkinter 模塊(import tkinter)
- 創建一個頂層窗口對象(調用 Tk()函數),用於容納整個 GUI 應用。
- 在頂層窗口對象上構建所有的 GUI 控件(按鈕、標籤、文本框、消息框)
- 通過底層應用代碼將這些 GUI 控件連接起來並確定控件的放置位置
- 進入主事件循環(調用 mainloop()函數)
# 第一步 導入包
from tkinter import * #導入包
from tkinter import messagebox # 彈出消息框
# 功能:應用按鈕控件和彈出對話框控件
# 作者:摘星
# 第二步 創建頂層窗口對象,並設置相關數據
root =Tk() #創建一個主窗口,所有的控件都是放在這裏面的
root.title("我的第一個gui窗體") # 標題
root.geometry("600x600+200+100") #控制主窗口的大小和位置(寬x高+距左邊位置+據上邊位置)
# 第三步 創建相關控件
btn01=Button(root) #創建一個(對象)按鈕控件,將對象放進主窗口中
btn01["text"]="開始按鈕" #給這個按鈕取個名字
# 第四步 確定控件放置位置,並設置單擊事件
btn01.pack() # 這東西負責佈局,就是控件放在主窗口中的位置,如果沒有會看不見
def hy(e):
#這個必須有參數的
'''單擊按鈕會發生的事情'''
messagebox.showinfo("歡迎","歡迎你進入gui的世界")
btn01.bind("<Button-1>", hy) #綁定單擊事件
第五步,開始事件循環
root.mainloop() #可以理解爲開始方法
tkinter常用控件
tkinter常用模塊說明
常用控件的介紹
Tkinter支持16個核心的窗口部件,這個16個核心窗口部件類簡要描述如下:
- Button:一個簡單的按鈕,用來執行一個命令或別的操作
- Canvas:組織圖形。這個部件可以用來繪製圖表和圖,創建圖形編輯器,實現定製窗口部件。
- Checkbutton:代表一個變量,它有兩個不同的值。點擊這個按鈕將會在這兩個值間切換。
- Entry:文本輸入域。
- Frame:一個容器窗口部件。幀可以有邊框和背景,當創建一個應用程序或dialog(對話)版面時,幀被用來組織其它的窗口部件。
- Label:顯示一個文本或圖象。
- Listbox:顯示供選方案的一個列表。listbox能夠被配置來得到radiobutton或checklist的行爲。
- Menu:菜單條。用來實現下拉和彈出式菜單。
- Menubutton:菜單按鈕。用來實現下拉式菜單。
- Message:顯示一文本。類似label窗口部件,但是能夠自動地調整文本到給定的寬度或比率。
- Radiobutton:代表一個變量,它可以有多個值中的一個。點擊它將爲這個變量設置值,並且清除與這同一變量相關的其它radiobutton。
- Scale:允許你通過滑塊來設置一數字值。
- Scrollbar:爲配合使用canvas, entry, listbox, and text窗口部件的標準滾動條。
- Text:格式化文本顯示。允許你用不同的樣式和屬性來顯示和編輯文本。同時支持內嵌圖象和窗口。
- Toplevel:一個容器窗口部件,作爲一個單獨的、最上面的窗口顯示。
- messageBox:消息框,用於顯示你應用程序的消息框。(Python2中爲tkMessagebox)
常用控件使用案例
1、創建主窗口及Label部件(標籤)創建使用
# 功能: 標籤按鈕的使用
# 作者:摘星
from tkinter import *
root=Tk() # 創建一個主窗口
root.title("標籤學習")
root.geometry('500x300')
lan=Label(root,text="你好世界",bg="red",font="華文彩雲",width="12",height="2",)
# 說明: bg爲背景,font爲字體,width爲長,height爲高,這裏的長和高是字符的長和高,比如height=2,就是標籤有2個字符這麼高
lan.pack() # 設置佈局,後面會詳細講
root.mainloop(
2、Entry控件的使用
簡單說明:
Entry是tkinter類中提供的的一個單行文本輸入域,用來輸入顯示一行文本,收集鍵盤輸入(類似 HTML 中的 text)。
from tkinter import *
# 功能:學習使用Entry控件
#作者: 摘星
# 創建主窗口
root=Tk()
root.title("登錄")
root.geometry("500x500")
lab1=Label(root,text="用戶名:") #標籤
lab2=Label(root,text="密碼:") #標籤
text1=Entry(root,font=('華文彩雲',14)) # 明文
text2=Entry(root,font=('華文彩雲',14),show='*') # 密文
# 下面是佈局,先不要管什麼後面會說
lab1.place(x=120,y=150)
lab2.place(x=120,y=175)
text1.place(x=150,y=150)
text2.place(x=150,y=175)
# 得到文本框中的內容
name=text1.get()
woss=text2.get()
print("用戶名是:{0},密碼是:{1}".format(name,woss)) #這裏留下了一個坑,後面會填
#開啓事件循環
root.mainloop()
3、Text控件的使用
簡單說明:
Text是tkinter類中提供的的一個多行文本區域,顯示多行文本,可用來收集(或顯示)用戶輸入的文字(類似 HTML 中的 textarea),格式化文本顯示,允許你用不同的樣式和屬性來顯示和編輯文本,同時支持內嵌圖象和窗口。
from tkinter import * # 使用Tkinter前需要先導入
# 第1步,實例化object,建立窗口window
root = Tk()
# 第2步,給窗口的可視化起名字
root.title('多行文本框')
# 第3步,設定窗口的大小(長 * 寬)
root.geometry('500x300') # 這裏的乘是小x
# 第4步,創建並放置一個多行文本框text用以顯示,指定height=3爲文本框是三個字符高度
t=Text(root,height=3)
t.pack()
# 第5步,主窗口循環顯示
root.mainloop()
4、 Menu窗口部件
簡單說明:
Menu:菜單條,用來實現下拉和彈出式菜單,點下菜單後彈出的一個選項列表,用戶可以從中選擇
from tkinter import *
from tkinter import messagebox
# 創建窗口
root=Tk()
root.title("記事本")
root.geometry('500x300')
#建立事件方法
def bj():
'''編輯方法'''
messagebox.showinfo(title='編輯', message='點了編輯菜單')
def bz():
messagebox.showinfo(title='幫助',message='幫助功能正在開發')
def ck():
'''查看方法'''
c=t.get(1.0,END) # 獲取文本域輸入
messagebox.showinfo(title="查看",message=c)
# 創建一個菜單欄,這就是個容器哈,裏面專門放菜單項的
menubar=Menu(root)
#創建菜單項
M1=Menu(menubar) # 項1
M2=Menu(menubar) # 項2
M3=Menu(menubar) # 項3
# 給上面創建的菜單系命名並添加到菜單項中
menubar.add_cascade(label="文件",menu=M1)
# 加入菜單,與上不同哦
menubar.add_command(label="編輯",command=bj)
menubar.add_command(label="幫助",command=bz)
#在文件菜單中加入一些小菜單,打開,保存,新建等等
M1.add_command(label='查看',command=ck)
M1.add_command(label='打開')
M1.add_command(label="保存")
# 完了之後還要顯示菜單欄
root.config(menu=menubar)
# 創建一個多行文本框
t=Text(root,height=3)
t.pack()
root.mainloop()
tkinter佈局管理器
tkinter 有三種佈局方式
1、grid佈局(方格佈局)
以下的代碼就是創建一個三行三列的表格,其實 grid 就是用表格的形式定位的。這裏的參數 row 爲行,colum 爲列,padx 就是單元格左右間距,pady 就是單元格上下間距,ipadx是單元格內部元素與單元格的左右間距,ipady是單元格內部元素與單元格的上下間距
import tkinter as tk # 使用Tkinter前需要先導入
# 摘星
# 測試tkinter的grid佈局
# 第1步,實例化object,建立窗口window
window = tk.Tk()
# 第2步,給窗口的可視化起名字
window.title('My Window')
# 第3步,設定窗口的大小(長 * 寬)
window.geometry('500x300') # 這裏的乘是小x
# 第4步,grid 放置方法
for i in range(3):
for j in range(3):
tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10)
# 第5步,主窗口循環顯示
window.mainloop()
2、Pack佈局
我們上面用的pack(), 他會按照上下左右的方式排列.例如
import tkinter as tk # 使用Tkinter前需要先導入
# 作者:摘星
# 功能: 測試pack佈局
# 第1步,實例化object,建立窗口window
window = tk.Tk()
# 第2步,給窗口的可視化起名字
window.title('My Window')
# 第3步,設定窗口的大小(長 * 寬)
window.geometry('500x300') # 這裏的乘是小x
# 第4步,pack 放置方法
tk.Label(window, text='我是上', fg='red').pack(side='top') # 上
tk.Label(window, text='我是下', fg='red').pack(side='bottom') # 下
tk.Label(window, text='我是左', fg='red').pack(side='left') # 左
tk.Label(window, text='我是右', fg='red').pack(side='right') # 右
# 第5步,主窗口循環顯示
window.mainloop()
3、Place佈局
再接下來我們來看place(), 這個比較容易理解,就是給精確的座標來定位,如此處給的(50, 100),就是將這個部件放在座標爲(x=50, y=100)的這個位置,
import tkinter as tk # 使用Tkinter前需要先導入
# 測試place佈局
# 摘星
# 第1步,實例化object,建立窗口window
window = tk.Tk()
# 第2步,給窗口的可視化起名字
window.title('My Window')
# 第3步,設定窗口的大小(長 * 寬)
window.geometry('500x300') # 這裏的乘是小x
# 第4步,place 放置方法(精準的放置到指定座標點的位置上)
tk.Label(window, text='軟件二班', font=('華文彩雲', 20), ).place(x=50, y=100, anchor='nw')
# 第5步,主窗口循環顯示
window.m
tkinter綜合案例——記事本
from tkinter import *
from tkinter import messagebox
from tkinter.colorchooser import *
from tkinter.filedialog import *
# 創建窗口
filename=''
root=Tk()
root.title("記事本")
root.geometry('500x300')
#建立事件方法
def xj():
'''新建方法'''
global filename # 聲明全局
filename=asksaveasfilename(title="另存爲",initialfile="未命名.txt"
,filetypes=[("文本對象","*.txt")]
,defaultextension=".txt")
bc()
def dk():
'''打開文件方法'''
global filename # 聲明全局
t.delete("1.0","end")
with askopenfile(title="打開文本文件") as f:
# askopenfile是內部提供的方法
t.insert(INSERT,f.read())
filename=f.name
def bc():
'''保存方法'''
with open(filename,'w')as f:
c=t.get(1.0,END)
f.write(c)
def bj():
'''編輯方法'''
messagebox.showinfo(title='編輯', message='點了編輯菜單')
def bz():
'''幫助方法'''
messagebox.showinfo(title='幫助',message='幫助功能正在開發')
# 創建一個菜單欄,這就是個容器哈,裏面專門放菜單項的
menubar=Menu(root)
#創建菜單項
M1=Menu(menubar) # 項1
M2=Menu(menubar) # 項2
M3=Menu(menubar) # 項3
# 給上面創建的菜單系命名並添加到菜單項中
menubar.add_cascade(label="文件",menu=M1)
# 加入菜單,與上不同哦
menubar.add_command(label="編輯",command=bj)
menubar.add_command(label="幫助",command=bz)
#在文件菜單中加入一些小菜單,打開,保存,新建等等
M1.add_command(label='新建',command=xj)
M1.add_command(label='打開',command=dk)
M1.add_command(label="保存",command=bc)
# 完了之後還要顯示菜單欄
root.config(menu=menubar)
# 創建一個多行文本框
t=Text(root,height=10)
t.pack()
root.mainloop()