# 用Python寫一個計算機
### #1
```python=
import tkinter as tk
#創建主頁面
root = tk.Tk()
root.title("我的計算機")
# 輸入欄位
entry_var = tk.StringVar()
#一個可以輸入字的一個框框
entry = tk.Entry(root,textvariable=entry_var, justify='right',font=('Arial',20))
entry.grid(row=0, column=0, columnspan=4, sticky='nsew')
#添加按鈕
Button = ['1', '2', '3', '+', '4', '5', '6', '-', '7', '8', '9', '*', '0', '=', 'C', '/']
#一種迴圈結構,同時會有遍歷目標list(Button)並且會有Index的存在
#這邊就會像是
#index: 0,(Button)value: 1 => '1'
for i, Button in enumerate(Button):
#設定按鈕的樣子
#創建了一個匿名函數(lambda表達式),
#這個表達式將當前按鈕的標籤(button)作為參數傳遞給on_click函數。
#這樣當按鈕被點擊時,on_click函數就會被調用,並且知道是哪個按鈕被點擊了。
#以我懂得例子來說就是
#Flutter在按鈕動作的時候會是
#-----------------------------
#ElevatedButton(
# onPressed: () {
# // 在這裡放置點擊按鈕後的邏輯
# print("按鈕被點擊了!");
# },
# child: Text('點擊我'),
#)
#-----------------------------
#在python的GUI(tkinter)當中就會是command + lambda的方式去呈現
#btn = tk.Button(root, text="點擊我", command=lambda: print("按鈕被點擊了!"))
btn = tk.Button(root,text=Button,font=('Arial',20), command=lambda b=Button: on_click(b))
#布局工具,這邊做到的是當迭代到第五項之前也就是 4 之前 都會被整除+1 併入第一列
#至於行就會是每4個為一行
btn.grid(row=(i//4)+1,column=i%4,sticky="nsew")
#視窗可以動態擴展或收縮
root.columnconfigure(i%4,weight=1)
def on_click(btn_txt):
value_txt = entry_var.get()
if btn_txt == "=":
try:
#eval方法是會計算數學運算的方式
#在這邊的話,你會在點擊數字按鈕之後做的所有運算
result = eval(value_txt)
entry_var.set(result)
except Exception:
entry_var.set('error')
elif btn_txt == "C":
entry_var.set("") # 清除Entry的文本
else:
entry_var.set(value_txt + btn_txt) # 將點擊的按鈕文本添加到Entry的當前文本
#執行視窗
root.mainloop()
```