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