【Day01】用tkinter製作圖形視窗介面(GUI)


前言

根據 TechSore網站的調查統計,可以看到2019年最受歡迎的 Python GUI 前10名順序如下:

  1. Tkinter GUI
  2. PyQT GUI
  3. KIVY GUI
  4. WxPython GUI
  5. PySide GUI
  6. PySimpleGUI
  7. PyGUI
  8. Pyforms GUI
  9. Wax Python GUI
  10. Libavg

而這裡我選擇利用 Python 內建的 Tkinter 套件庫,來製作一個圖形視窗介面,透過在圖形介面上放置一些常見的元件,例如:按鈕、文字方塊、下拉式選單...等,來設計整個應用程式。

視窗樣式參考


這次以這個 Ummy Video Downloader 做為本篇的視窗樣式參考,看完本篇的人可以製作自己喜歡的樣式。

製作流程

整個圖形介面主要會有以下三個步驟:

  1. 建立主視窗(設定主視窗大小、縮放和主視窗標題)。
  2. 將元件(如:圖片、文字方塊、按鈕、下載清單等)放入主視窗中,實作事件處理函式,例如:點擊按鈕時會觸發什麼。
  3. 啟動主視窗。

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等图片

#tkinter #PIL







你可能感興趣的文章

Week1: CLI 和 Git 筆記

Week1: CLI 和 Git 筆記

[ week 2 ]  來打造 JaveScript 的基礎 - 變數 與 型別

[ week 2 ] 來打造 JaveScript 的基礎 - 變數 與 型別

使用 ROS 與 Gazebo 模擬一個自動避障機器人

使用 ROS 與 Gazebo 模擬一個自動避障機器人






留言討論