Tkinter模組


Tkinter 是 Python 標準庫中提供的一個用於創建圖形用戶界面 (GUI) 的模組。它是一個跨平台工具包,通過 Tkinter,開發者可以快速構建圖形化的應用程式,例如計算機、文字編輯器、圖形繪製工具等。

Tkinter 的特點

  1. 簡單易用:適合初學者,提供直接的接口來構建 GUI 應用。
  2. 跨平台支持:支援 Windows、macOS 和大多數 Linux 系統,除了windows以外都需用pip額外安裝
  3. 標準庫支持:內建於 Python 中,無需額外安裝。
  4. 基本組件豐富:包含標籤、按鈕、文字框、選單、進度條等常見 GUI 元件。

 

一開始使用這個模組是因為想練習GUI套件,所以找到一個較簡易的模組,用來設計計算機。以下是tkinter內建的基本function,後續會一一介紹。

Tkinter 的組件簡介

元件名稱 功能描述
Label 用於顯示文字或圖像的標籤元件。
Button 按鈕元件,可用於觸發事件或執行功能。
Entry 單行文字輸入框,用於接收用戶輸入的簡單文字。
Text 多行文字輸入框,用於編輯或顯示多行文字。
Radiobutton 單選按鈕組,用於讓用戶在多個選項中選擇一個。
Checkbutton 複選按鈕,用於啟用或停用多個選項。
Listbox 列表框,用於顯示多項內容並允許用戶選擇其中一項或多項。
OptionMenu 下拉選單,提供多個選項以供選擇。
Scale 滑動條,用於調整數值範圍內的值。
Spinbox 數值調整框,提供增減特定範圍內數值的功能。
Frame 框架,用於組織和排列其他元件。
LabelFrame 帶標籤的框架,用於分組相關元件。
Scrollbar 滾動條,用於為列表、文本框等組件提供滾動功能。
Canvas 畫布,用於繪製圖形、顯示圖片或設置自定義的界面。
Menu 選單條,用於創建應用程式的功能選單。
Messagebox 消息框,用於顯示提示、警告或錯誤訊息。
PhotoImage 用於在介面中顯示圖片。
ttk.Progressbar 進度條,用於顯示任務的執行進度。
ttk.Combobox 下拉選單,結合輸入和選項的功能。

近期更加熟悉Tkinter模組後,想說要練習一點更進階的。

所以萌生了寫一個簡單的遊戲,不過寫完才發現只使用到Button, Label, Frame 

總之寫的過程中更熟悉Python的一些語法。

接下來會一一介紹每個Class裡的Method是如何一步步做出這個遊戲,最後也會附上exe檔

首先先創建class TicTacToe

然後定義__init__

def __init__(self, root) -> None:
 self.root = root # 紀錄root視窗
 self.root.title("Tic Tac Toe") # 視窗名稱顯示Tic Tac Toe
 
 self.record = {} # 後續電腦紀錄X, O 的位置
 self.record.setdefault("X", []) # 字典類別,{key, value} = {'X', []}
 self.record.setdefault("O", []) # 字典類別,{key, value} = {'Y', []}
 self.current_player = "X" # 玩家先手預設使用 X
 self.board = [["" for _ in range(3)] for _ in range(3)] # 紀錄 3*3 空格中分別被誰占住
 self.buttons = [[None for _ in range(3)] for _ in range(3)] # button 顯示X, O的變數
 
 self.scores = {"X": 0, "O": 0} # X, O 的分數
 self.frame = ttk.Frame(self.root, padding="10") # 用來顯示X, O 分數的Frame
 self.frame.grid(row=0, column=0) # 用grid的方式顯示,而非pack
 self.score_label = ttk.Label(
 self.frame, text="X:0 | O: 0", font=("Arial", 16)
 ) # 對應的文字訊息,使用label放上去
 self.score_label.grid(row=0, column=0, columnspan=3, pady=(0, 10)) # 使用grid方式顯示
 
 self.create_board() # 創建 3*3 棋盤

 

創建 3 * 3 棋盤,每格使用Button方式填充,按下對應button後會執行make_move Method,並且將每個button屬性記錄進self.buttons

def create_board(self):
  for row in range(3):
    for col in range(3):
      button = tk.Button(
      self.root,
      text="",
      font=("Arial", 16),
      width=5,
      height=2,
      command=lambda r=row, c=col: self.make_move(r, c),
      )
      button.grid(row=row + 1, column=col, padx=5, pady=5)
      self.buttons[row][col] = button

 

未完待續.... 今天一次更新太多,盡量快速更新完

非常簡陋的外觀,下載如果想試試看的話。

文章標籤
全站熱搜
創作者介紹
創作者 Luke 的頭像
Luke

Luke的部落格

Luke 發表在 痞客邦 留言(0) 人氣(3)