上次使用Chatgpt寫爬蟲,雖然寫出來的代碼很多需要修改後才能運行,但Chatgpt提供的思路和框架都是沒問題。
這次讓Chatgpt寫一寫GUI程序,也就是你常看到的桌面圖形程序。
由於第一次測試,就來個簡單點的,用Python寫用來加減乘除的計算器。
提問:
請用Python寫一個計算器GUI程序
ChatGPT:
(代碼過長,就不完全展示了)
它告訴我,可以使用Python的tkinter庫來實現簡單的GUI,這確實是最快捷的方法。
代碼執行出來是一個很簡答的計算器程序,沒有什麼UI設計可言。
用起來也沒什麼毛病,但似乎外觀上應該更好看點。
iPhone手機的計算器APP是集美貌、簡潔、方便、功效於一體的計算器代表作。
於是我問:
幫我優化下這個計算器的UI界面 類似iphone計算器風格。
ChatGPT:
這次代碼居然沒有完整展現出來,Chatgpt生成到一半自動斷了,也不知道什麼原因。
我又問它:
請寫完後半部分。
ChatGPT:
最後它補充道,
這段代碼實現了以下功能:
1、創建計算器 GUI 的主要界面,包括數字按鈕和文本框;
2、對數字按鈕和運算符按鈕的點擊事件進行響應,完成對方程的修改、計算和清空等操作;
3、實現了基本的錯誤處理功能。
你可以將這段代碼保存爲 calculator.py,並在命令行中運行它,即可啓動這個計算器 GUI 程序。
經過優化後的代碼,UI確實好看多了,類似iPhone計算器的風格,但美感上還差很多,功能也比較簡單。
附上完整代碼:
import tkinter as tk
from tkinter import font
class Calculator:
def __init__(self, master):
self.master = master
master.title("Calculator")
master.geometry("350x560")
master.resizable(width=False, height=False)
# 設置按鈕和文本框字體
self.button_font = font.Font(size=20)
self.equation_font = font.Font(size=30)
# 創建顯示方程的文本框
self.equation = tk.Entry(master, width=12, font=self.equation_font, borderwidth=0, justify=tk.RIGHT)
self.equation.grid(row=0, column=0, columnspan=4, padx=10, pady=20, ipady=15)
# 創建數字按鈕
self.create_button("C", 1, 0, bg="white", fg="black", width=4, height=2)
self.create_button("±", 1, 1, bg="white", fg="black", width=4, height=2)
self.create_button("%", 1, 2, bg="white", fg="black", width=4, height=2)
self.create_button("÷", 1, 3, bg="#FF9500", fg="white", width=4, height=2)
self.create_button("7", 2, 0, bg="#E4E4E4", fg="black")
self.create_button("8", 2, 1, bg="#E4E4E4", fg="black")
self.create_button("9", 2, 2, bg="#E4E4E4", fg="black")
self.create_button("×", 2, 3, bg="#FF9500", fg="white", width=4, height=2)
self.create_button("4", 3, 0, bg="#E4E4E4", fg="black")
self.create_button("5", 3, 1, bg="#E4E4E4", fg="black")
self.create_button("6", 3, 2, bg="#E4E4E4", fg="black")
self.create_button("-", 3, 3, bg="#FF9500", fg="white", width=4, height=2)
self.create_button("1", 4, 0, bg="#E4E4E4", fg="black")
self.create_button("2", 4, 1, bg="#E4E4E4", fg="black")
self.create_button("3", 4, 2, bg="#E4E4E4", fg="black")
self.create_button("+", 4, 3, bg="#FF9500", fg="white", width=4, height=2)
self.create_button("0", 5, 0, bg="#E4E4E4", fg="black", width=8)
self.create_button(".", 5, 2, bg="#E4E4E4", fg="black")
self.create_button("=", 5, 3, bg="#FF9500", fg="white", width=4, height=2)
def create_button(self, text, row, column, bg="#F0F0F0", fg="black", width=2, height=1):
# 創建按鈕
button = tk.Button(self.master, text=text, bg=bg, fg=fg, width=width, height=height, font=self.button_font,
borderwidth=0, command=lambda: self.button_click(text))
button.grid(row=row, column=column, padx=5, pady=5, ipady=5, sticky="NSEW")
def button_click(self, text):
if text == "C":
self.equation.delete(0, tk.END)
elif text == "±":
equation = self.equation.get()
if equation.startswith("-"):
self.equation.delete(0)
self.equation.insert(0, equation[1:])
elif equation:
self.equation.insert(0, "-")
elif text == "%":
equation = self.equation.get()
try:
result = float(equation) / 100
self.equation.delete(0, tk.END)
self.equation.insert(0, result)
except ValueError:
pass
elif text in ["+", "-", "×", "÷"]:
if self.equation.get() and not self.equation.get().endswith(("+", "-", "×", "÷")):
self.equation.insert(tk.END, text)
elif text == ".":
if self.equation.get() and "." not in self.equation.get():
self.equation.insert(tk.END, ".")
elif not self.equation.get():
self.equation.insert(tk.END, "0.")
elif text == "=":
equation = self.equation.get()
try:
result = eval(equation)
self.equation.delete(0, tk.END)
self.equation.insert(0, result)
except (SyntaxError, ZeroDivisionError):
self.equation.delete(0, tk.END)
self.equation.insert(0, "Error")
else:
self.equation.insert(tk.END, text)
# 創建主窗口
root = tk.Tk()
# 創建計算器 GUI
calculator = Calculator(root)
# 進入主事件循環
root.mainloop()