什麼是GUI呢?
GUI是Graphical User Interface的首字母簡寫,翻譯過來就是圖像用戶接口,簡單理解就是,咋們window系統中窗口以及各種按鈕、輸入框、菜單欄等。
例如下圖,開發GUI的目的就是為了讓用戶更好的使用軟件和計算機。
學過java的小伙伴們應該都知道java裡面的GUI編程,java中使用swing或者awt庫。Python的GUI編程和java的基本一致,Python中使用Tkinter庫中的那些組件,比如說:Label(標簽)、Entry(輸入框)、Button(按鈕)、Text(文本框)來實現GUI編程。
這項技術已經不斷被淘汰,但是學習總得學習一下的啦,接下來就使用真實案例和代碼來學習一下吧。
# coding:utf-8
# 導入tkinter庫,並且重命名為tk
import tkinter as tk
# 通過tk創建窗口
window = tk.Tk()
# 給窗口起個標題
window.title("新的窗口")
# 設定窗口的尺寸
window.geometry("1000x500")
# 創建組件中字符串變量,在組件裡面使用
var = tk.StringVar()
# 設定標簽,第一個參數是該組件的父組件,其他參數設定具體屬性
l = tk.Label(window, textvariable=var, bg="red", font=("Arial", 12), width=15,
height=2)
# 防止標簽
l.pack()
on_hit = False
def hit():
global on_hit
# 默認最初沒有點
if on_hit == False:
on_hit = True
# 通過set方法設定組件中的變量
var.set("你點擊我了")
else:
on_hit = False
var.set("")
# 創建按鈕,並通過command進行點擊後的函數處理
b = tk.Button(window, text="hit me", width=15, height=2, command=hit)
# 放置按鈕
b.pack()
# 讓窗口保持不斷更新
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" entry和text控件的使用 """
# 獲取上窗口
window = tk.Tk()
# 設定窗口的名稱
window.title("小把戲")
# 設定窗口的尺寸
window.geometry("1000x500")
# 設定輸入框
entry = tk.Entry(window, show=None)
# 放置輸入框
entry.pack()
# 末尾插入
def insert_end():
e_content = entry.get()
t.insert("end", e_content)
# 插入點進行插入
def insert_point():
e_content = entry.get()
t.insert("insert", e_content)
# 設定按鈕1,最末尾進行插入
b1 = tk.Button(window, text="end insert", command=insert_end)
# 設定按鈕2,在插入點進行插入
b2 = tk.Button(window, text="point insert", command=insert_point)
# 放置按鈕1
b1.pack()
# 放置按鈕2
b2.pack()
# 設定顯示框
t = tk.Text()
# 放置位置
t.pack()
# 讓窗口循環起來,保持不斷的更新
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" 列表的使用 """
# 獲取窗口
window = tk.Tk()
# 設定窗口的名稱
window.title("列表的使用")
# 設定窗口的尺寸
window.geometry("1000x500")
var1 = tk.StringVar()
# 創建標簽
l = tk.Label(window, textvariable=var1, bg="yellow", width=15, height=2)
# 放置標簽
l.pack()
def job():
# 獲取現在鼠標點擊項的內容
v = lb.get(lb.curselection())
# 設定標簽內容
var1.set(v)
# 創建按鈕
b = tk.Button(window, text="你給我上去", command=job)
# 放置按鈕
b.pack()
var2 = tk.StringVar()
var2.set(("清華大學", "北京大學", "復旦大學", "交通大學"))
# 創建列表盒子
lb =tk.Listbox(window, listvariable=var2)
list_item = [1, 2, 3, 4]
# 循環插入
for m in list_item:
lb.insert("end", m)
lb.insert(1, "first")
lb.insert(2, "second")
lb.delete(2)
lb.pack()
# 循環窗口
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" 使用單選按鈕 """
window = tk.Tk()
window.title("抽獎系統")
window.geometry("1000x500")
# tkinter中的變量都是這樣的
var = tk.StringVar()
# 使用標簽顯示單選之後的結果
l = tk.Label(window, text=" ", bg="green", width=30, height=2)
# 放置標簽
l.pack()
def job():
l.config(text = "恭喜您抽到了" + var.get())
# 創建單選按鈕A
rb1 = tk.Radiobutton(window, text="禮物A", variable=var, value="MacBook", command=job)
rb1.pack()
# 創建單選按鈕B
rb2 = tk.Radiobutton(window, text="禮物B", variable=var, value="iphone", command=job)
rb2.pack()
# 創建單選按鈕C
rb3 = tk.Radiobutton(window, text="禮物C", variable=var, value="ipad", command=job)
rb3.pack()
# 循環起來
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" scale的使用 """
# 獲取窗口
window = tk.Tk()
# 設置窗口的標題
window.title("調節音量")
# 設置窗口的尺寸
window.geometry("1000x500")
# 設置標簽
l = tk.Label(window, bg="yellow", width=30, height=2, text="")
# 放置標簽
l.pack()
# scale部件,默認會將自己的值作為參數進行傳遞
def job(v):
l.config(text="現在的音量是" + v)
# 定義一個scale,設定其長度,具體起始點,水平方向,精度等
scale = tk.Scale(window, length=500, orient=tk.HORIZONTAL,from_ = 0,to=100,
tickinterval=10, resolution=0.01, showvalue=1, command=job)
# 放置scale
scale.pack()
# 讓窗口循環起來
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" 多選按鈕的使用 """
# 創建窗口
window = tk.Tk()
# 設置窗口的標題
window.title("練習多選按鈕")
# 設置窗口的尺寸
window.geometry("1000x500")
# 組件中的整數變量寫法
var1 = tk.IntVar()
var2 = tk.IntVar()
# 標簽
l = tk.Label(window, bg="yellow", text="", width=20, height=2)
# 放置標簽
l.pack()
def job():
if var1.get() == 1 and var2.get() == 0:
l.config(text="I only love C++")
elif var1.get() == 0 and var2.get() == 1:
l.config(text="I only love Python")
elif var1.get() == 0 and var2.get() == 0:
l.config(text="I don't love either")
else:
l.config(text="I both love them")
# 多選按鈕
cb1 = tk.Checkbutton(window, text="C++", variable=var1, onvalue=1, offvalue=0, command=job)
cb2 = tk.Checkbutton(window, text="Python", variable=var2, onvalue=1, offvalue=0, command=job)
cb1.pack()
cb2.pack()
# 循環
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" 畫布的使用 """
# 創建窗口
window = tk.Tk()
# 設定窗口的標題
window.title("畫布的使用")
# 設定畫布的尺寸
window.geometry("1000x500")
# 創建畫布
canvas = tk.Canvas(window, bg="blue", height=400, width=700)
# 加載圖片文件
image_file = tk.PhotoImage(file="F:\\研究生0年級\\learnAI\\a.png")
# 將圖片放在畫布中的具體位置
image = canvas.create_image(10, 10, anchor="nw", image = image_file)
# 畫布中畫各種形狀
x0, y0, x1, y1 = 50, 50 ,80, 80
# 畫線
line = canvas.create_line(x0, y0, x1, y1)
# 圓型
circular = canvas.create_oval(x0, y0, x1, y1, fill="red")
# 扇形
arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=120)
# 正方形,邊長為20
rect = canvas.create_rectangle(100, 30, 100+20, 30+20)
canvas.pack()
# 移動函數
def move():
canvas.move(rect, 0, 20)
# 按鈕
b = tk.Button(window, text="移動", command=move)
b.pack()
# 循環起來
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" menubar菜單欄 """
# 獲取窗口
window = tk.Tk()
# 設定窗口名稱
window.title("菜單欄的使用")
# 設定窗口的大小
window.geometry("1000x500")
# 放一個標簽
l = tk.Label(window, text="", width=50, height=5, bg="yellow")
l.pack()
counter = 0
def job():
global counter
l.config(text="do %d" %counter)
counter += 1
# 獲取菜單欄
menubar = tk.Menu(window)
# 菜單1之文件菜單
filemenu = tk.Menu(menubar, tearoff=0)
# 使用菜單欄將文件菜單添加進去
menubar.add_cascade(label="文件", menu=filemenu)
filemenu.add_command(label="新建", command=job)
filemenu.add_command(label="打開", command=job)
filemenu.add_command(label="保存", command=job)
# 分割線
filemenu.add_separator()
# 退出
filemenu.add_command(label="退出", command=window.quit)
# 菜單2之大學
universitymenu = tk.Menu(menubar, tearoff=0)
# 使用菜單欄將菜單2添加進去
menubar.add_cascade(label="大學", menu=universitymenu)
universitymenu.add_command(label="清華大學", command=job)
universitymenu.add_command(label="北京大學", command=job)
universitymenu.add_command(label="浙江大學", command=job)
# 創建二級菜單,文件菜單是一級菜單,所以是父組件
second_menu = tk.Menu(filemenu)
# 文件菜單父組件將二級菜單進行添加
filemenu.add_cascade(label="導入", menu=second_menu, underline=0)
# 二級菜單中放具體項
second_menu.add_command(label="你好",command=job)
# 將創建的菜單欄,修改進原窗口中
window.config(menu=menubar)
# 循環起來
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" 框架frame的使用 """
# 創建窗口
window = tk.Tk()
# 設定窗口的標題
window.title("其實就是劃分區域呗")
# 設定窗口的尺寸
window.geometry("1000x500")
# 先創建標簽,並放置
l = tk.Label(text="on the window").pack()
# 窗口裡面的大框架
frm = tk.Frame(window)
# 放置這個框架
frm.pack()
# 左側框架
frm1 = tk.Frame(frm,)
# 將框架放置到左側
frm1.pack(side="left")
# 右側框架
frm2 = tk.Frame(frm,)
# 將框架放置到右側
frm2.pack(side="right")
# 劃分好區域之後,進行分區域放標簽
tk.Label(frm1, text="左側標簽1").pack()
tk.Label(frm1, text="左側標簽2").pack()
tk.Label(frm2, text="右側標簽").pack()
# 使窗口循環起來
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
import tkinter.messagebox
from tkinter import messagebox
""" 彈窗的使用 """
# 獲取窗口
window = tk.Tk()
# 設置窗口標題
window.title("彈窗的使用")
# 設置窗口的大小
window.geometry("1000x500")
def job():
# 彈窗展示信息
tkinter.messagebox.showinfo(title="Hi", message='hahahah')
# warning
# tkinter.messagebox.showwarning(title="warining", message="警告")
# error
# tkinter.messagebox.showerror(title="error", message="錯誤")
# 詢問框,返回yes或者no
# print(tk.messagebox.askquestion(title="詢問yes或no", message="Are you OK?"))
# 詢問框,返回True或者FALSE
# print(tk.messagebox.askyesno(title="詢問true或false", message="Do you love me?"))
# 詢問確認還是取消,返回true和false
# print(tk.messagebox.askokcancel(title="購物", message="確定要購買嗎?"))
# 詢問重試還是取消,返回true和false
# print(tk.messagebox.askretrycancel(title="愛", message="你愛我嗎?"))
b = tk.Button(window, text="點我試試", command=job).pack()
# 循環起來
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" pack、gird、place三種放置方式 """
# 獲取窗口
window = tk.Tk()
# 設定窗口的標題
window.title("放置組件的三種方法")
# 設定窗口尺寸
window.geometry("1000x500")
tk.Label(window, text="上面").pack(side="top")
tk.Label(window, text="下面").pack(side="bottom")
tk.Label(window, text="左面").pack(side="left")
tk.Label(window, text="右面").pack(side="right")
# 循環起來
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" pack、grid、place三種放置方式 """
# 獲取窗口
window = tk.Tk()
# 設定窗口的標題
window.title("放置組件的三種方法")
# 設定窗口尺寸
window.geometry("1000x500")
for i in range(4):
for j in range(3):
# padx和pady是用來擴展每個方格的大小
tk.Label(window, text="love").grid(row=i, column=j, padx=50, pady=50)
# 循環起來
window.mainloop()
效果圖:
# coding:utf-8
import tkinter as tk
""" pack、grid、place三種放置方式 """
# 獲取窗口
window = tk.Tk()
# 設定窗口的標題
window.title("放置組件的三種方法")
# 設定窗口尺寸
window.geometry("1000x500")
# 以最西北方向為坐標原點,在具體的xy坐標位置,放置
tk.Label(window, text="啊啊啊啊").place(x=100, y=100, anchor="nw")
# 循環起來
window.mainloop()
效果圖: