前言
根據 TechSore網站的調查統計,可以看到2019年最受歡迎的 Python GUI 前10名順序如下:
- Tkinter GUI
- PyQT GUI
- KIVY GUI
- WxPython GUI
- PySide GUI
- PySimpleGUI
- PyGUI
- Pyforms GUI
- Wax Python GUI
- Libavg
而這裡我選擇利用 Python 內建的 Tkinter 套件庫,來製作一個圖形視窗介面,透過在圖形介面上放置一些常見的元件,例如:按鈕、文字方塊、下拉式選單...等,來設計整個應用程式。
視窗樣式參考
這次以這個 Ummy Video Downloader 做為本篇的視窗樣式參考,看完本篇的人可以製作自己喜歡的樣式。
製作流程
整個圖形介面主要會有以下三個步驟:
- 建立主視窗(設定主視窗大小、縮放和主視窗標題)。
- 將元件(如:圖片、文字方塊、按鈕、下載清單等)放入主視窗中,實作事件處理函式,例如:點擊按鈕時會觸發什麼。
- 啟動主視窗。
Step1:主視窗
匯入tkinter模組來建立主視窗物件,做為所有元件的容器,並設定主視窗預設尺寸為640x480,主視窗的寬跟高皆不可縮放(True為可調整縮放,False不可),主視窗標題為YouTube Video Downloader,主視窗 icon為YouTube.ico(可以在這裡下載)。
import tkinter as tk #匯入tkinter模組
win = tk.Tk() # 建立主視窗物件
win.geometry('640x480') # 設定主視窗預設尺寸為640x480
win.resizable(False,False) # 設定主視窗的寬跟高皆不可縮放
win.title('YouTube Video Downloader') # 設定主視窗標題
win.iconbitmap('YouTube.ico') # 設定主視窗 icon
Step2-1:顯示圖片
在實作的過程中發現tkinter是只支援.gif的圖片格式,如果要顯示 .png 或者 .jpg 格式的話就要使用到 PIL模組,記得先在命令提示字元(cmd)執行pip install pillow
安裝 PIL模組,然後可以在flaticon網站下載youtube的圖片,放在程式碼所在的資料夾。
img=Image.open("youtube.png")
img=ImageTk.PhotoImage(img)
imLabel=tk.Label(win,image=img)
imLabel.pack()
Step2-2:網址輸入區域&下載清單
設定網址輸入區域(用一個Frame包起來)、提示文字為 Type a link like a video or a playlist 、輸入框、按鈕文字為Download,按鈕的函式。
#設定網址輸入區域
input_frm = tk.Frame(win, width=640, height=50)
input_frm.pack()
#設定提示文字
lb = tk.Label(input_frm, text='Type a link like a video or a playlist',fg='black')
lb.place(rely=0.2, relx=0.5, anchor='center')
#設定輸入框
input_url = tk.StringVar() # 取得輸入的網址
input_et = tk.Entry(input_frm, textvariable=input_url, width=60)
input_et.place(rely=0.75, relx=0.5, anchor='center')
#設定按鈕
def btn_click(): # 按鈕的函式
print('後面再實作')
btn = tk.Button(input_frm, text='Download', command = btn_click,
bg='orange', fg='Black')
btn.place(rely=0.75, relx=0.9, anchor='center')
#下載清單區域
dl_frm = tk.Frame(win, width=640, height=280)
dl_frm.pack()
#設定提示文字
lb = tk.Label(dl_frm, text='Download list',fg='black')
lb.place(rely=0.1, relx=0.5, anchor='center')
#設定顯示清單
listbox = tk.Listbox(dl_frm, width=65, height=15)
listbox.place(rely=0.6, relx=0.5, anchor='center')
#設定捲軸
sbar = tk.Scrollbar(dl_frm)
sbar.place(rely=0.6, relx=0.87, anchor='center', relheight=0.75)
#連結清單和捲軸
listbox.config(yscrollcommand = sbar.set)
sbar.config(command = listbox.yview)
Step3:啟動主視窗
記得要在最下方加這行程式碼,來啟動主視窗,不然不會顯示視窗。
#啟動主視窗
win.mainloop()
成果如下:
小結
Day01的進度:目前的Youtube影片下載程式,已經有了基本的外觀,成功利用 Python 內建的 Tkinter 套件庫,學會建立一個圖形視窗介面。
如果程式碼有錯誤或是有其他想法,也可以在下方留言告訴我。
參考資料
如何在 Tkinter 中設定視窗圖示
【Proladon】Python GUI - Tkinter
tkinter 窗口可视化你的 python 程序 GUI 教学
使用tkinter加载png、jpg等图片