Python GUI之tkinter庫教程

tkinter的簡介

tkinter 是 Python 的標準 GUI 庫。它基於 Tk 工具包,該工具包最初是爲工具命令語言(Tool Command Language,Tcl)設計的。Tk 普及後,被移植到很多其他的腳本語言中,包括 Perl,Ruby 和 Python。結合 Tk 的可移植性與靈活性,以及與系統語言功能集成的腳本語言的簡潔性,可以快速開發 GUI 應用程序

對於gui編程我是這樣理解的, 我們小時候都玩過積木,只要發揮創意,相同的積木可以堆出各種造型。tkinter的組件也可以看做一個個積木,形狀或許不同,其本質都是一樣的,就是一個積木,不管它長什麼樣子,它始終就是積木!我們主要學習他如何使用,如何放置,至於積木如何製作出來的不用管。

GUI編程步驟

創建gui程序的步驟
創建一個 GUI 應用程序需要以下 5 個主要步驟。

  1. 導入 tkinter 模塊(import tkinter)
  2. 創建一個頂層窗口對象(調用 Tk()函數),用於容納整個 GUI 應用。
  3. 在頂層窗口對象上構建所有的 GUI 控件(按鈕、標籤、文本框、消息框)
  4. 通過底層應用代碼將這些 GUI 控件連接起來並確定控件的放置位置
  5. 進入主事件循環(調用 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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章