###### tags: `Tkinter` # Tkinter ## 模組 ### tkinter 主要模組 ```python import tkinter as tk ``` ### tkinter.ttk Tk 8.5 中引入的主題小部件集,為主模塊中的許多經典小部件提供現代替代品tkinter。 ```python from tkinter.ttk import* ``` ### tkinter.colorchooser 讓用戶選擇顏色的對話框。 ```python from tkinter.colorchooser import* ``` example: ```python= import tkinter as tk from tkinter.colorchooser import* color = tk.colorchooser.askcolor() print(color) ``` 執行結果: ![](https://i.imgur.com/XDTlekn.png) ### tkinter.commondialog 此處列出的其他模塊中定義的對話框的基類。 ```python from tkinter.commondialog import* ``` ### tkinter.filedialog 允許用戶指定要打開或保存的文件的通用對話框。 ```python from tkinter.filedialog import* ``` example: ```python= import tkinter as tk from tkinter.filedialog import* file = tk.filedialog.askopenfile(mode='r') print(file) ``` 執行結果: ![](https://i.imgur.com/bWqX6NK.png) ```python import tkinter as tk from tkinter.filedialog import* file = tk.filedialog.askdirectory() print(file) ``` ### tkinter.font 幫助處理字體的實用程序。 ```python from tkinter.font import* ``` ### tkinter.messagebox 訪問標準 Tk 對話框。 ```python from tkinter.messagebox import* ``` ### tkinter.scrolledtext 內置垂直滾動條的文本小部件。 ```python from tkinter.scrolledtext import* ``` ### tkinter.simpledialog 基本對話框和便利功能。 ```python from tkinter.simpledialog import* ``` ## 基礎教學 製作一個 Hello tkinter 的視窗 ```python= import tkinter as tk app = tk.Tk() tk.Label(app, text="Hello tkinter", width="30", height="10").pack() app.mainloop() ``` ### 視窗大小 geometry ``` w=350 #width r=200 #height x=200 #與視窗左上x的距離 y=300 #與視窗左上y的距離 root.geometry('%dx%d+%d+%d' % (w,r,x,y)) ``` ### 布局管理器1 pack() pack() 適合少量元件的排序, 如果是複雜的框架則可以使用 grid 或是 Frame 框架, 而同一個組件中不能同時使用 pack() 與 grid() width/height单位是文本宽度,即一个英文字符显示的宽度,而不是像素值(padx/y,geometry都是像素值 flat, groove, raised, ridge, solid, or sunken var=IntVar() # 整型變量,默認值為:0 var=StringVar() # 字符串變量,默認值為:「」 (空字符串) var=DoubleVar() # 浮點型變量,默認值為:0.0 var=BooleanVar() # 布爾型變量,默認值 為:False ![](https://i.imgur.com/6uWkrsH.png) ```python= import tkinter as tk from tkinter import ttk root=tk.Tk() root.title("pack() 測試") root.geometry("300x250") ttk.Button(root, text="東").pack(anchor=tk.E) ttk.Button(root, text="西").pack(anchor=tk.W) ttk.Button(root, text="南").pack(anchor=tk.S) ttk.Button(root, text="北").pack(anchor=tk.N) ttk.Button(root, text="中").pack(anchor=tk.CENTER) ttk.Button(root, text="東南").pack(anchor=tk.SE) ttk.Button(root, text="西北").pack(anchor=tk.NW) ttk.Button(root, text="西南").pack(anchor=tk.SW) ttk.Button(root, text="東北").pack(anchor=tk.NE) root.mainloop() ``` | 小部件類 | 款式名稱 | | -------- | -------- | Button | TButton Checkbutton |TCheckbutton Combobox | TCombobox Entry | TEntry Frame | TFrame Label | TLabel LabelFrame | TLabelFrame Menubutton | TMenubutton Notebook | TNotebook PanedWindow | TPanedwindow Progressbar* | Horizontal.TProgressbar 或 Vertical.TProgressbar,取決於 orient 選項。 Radiobutton | TRadiobutton Scale* | Horizontal.TScale 或 Vertical.TScale,取決於 orient 選項。 Scrollbar* | Horizontal.TScrollbar 或者 Vertical.TScrollbar,取決於 orient 選項 Separator | TSeparator Sizegrip | TSizegrip Treeview* | Treeview ## entry 輸入框無法輸入小數點 在一般 entry 部件中沒辦法在中文輸入模式下輸入小數點,除非切換英文輸入模式才可以鍵入。 以下是解決方法: 加入 `entry.bind("<Key>", on_key_press)` 這一行,就可以偵測輸入的鍵位,如果是 . 那就插入小數點數值。 ```python= import tkinter as tk def on_key_press(event): # 插入小數點 if event.char == ".": entry.insert(tk.END, event.char) root = tk.Tk() entry = tk.Entry(root) entry.pack() entry.bind("<Key>", on_key_press) root.mainloop() ```