###### 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()
```