---
# System prepended metadata

title: Tkinter
tags: [Tkinter]

---

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