原码笔记

原码笔记

利用Chatgpt开发一款加减乘除计算器(Python代码实现)

小诸哥 0


上次使用 Chatgpt 写爬虫,虽然写出来的代码很多需要修改后才能运行,但Chatgpt提供的思路和框架都是没问题。

这次让 Chatgpt 写一写GUI程序,也就是你常看到的桌面图形程序。

由于第一次测试,就来个简单点的,用python写用来加减乘除的计算器。

提问:请用Python写一个计算器GUI程序

利用Chatgpt开发一款加减乘除计算器(Python代码实现)

(代码过长,就不完全展示了)

它告诉我,可以使用Python的tkinter库来实现简单的GUI,这确实是最快捷的方法。

代码执行出来是一个很简答的计算器程序,没有什么UI设计可言。

利用Chatgpt开发一款加减乘除计算器(Python代码实现)

用起来也没什么毛病,但似乎外观上应该更好看点。

利用Chatgpt开发一款加减乘除计算器(Python代码实现)

iPhone手机的计算器APP是集美貌、简洁、方便、功效于一体的计算器代表作。

利用Chatgpt开发一款加减乘除计算器(Python代码实现)

于是我问:帮我优化下这个计算器的UI界面 类似iphone计算器风格。

ChatGPT:

利用Chatgpt开发一款加减乘除计算器(Python代码实现)

这次代码居然没有完整展现出来,Chatgpt生成到一半自动断了,也不知道什么原因。

我又问它:请写完后半部分。

ChatGPT:

利用Chatgpt开发一款加减乘除计算器(Python代码实现)

最后它补充道

这段代码实现了以下功能:

1、创建计算器 GUI 的主要界面,包括数字按钮和文本框;
2、对数字按钮和运算符按钮的点击事件进行响应,完成对方程的修改、计算和清空等操作;
3、实现了基本的错误处理功能。

你可以将这段代码保存为 calculator.py,并在命令行中运行它,即可启动这个计算器 GUI 程序。


经过优化后的代码,UI确实好看多了,类似iPhone计算器的风格,但美感上还差很多,功能也比较简单。

利用Chatgpt开发一款加减乘除计算器(Python代码实现)

附上完整代码(来自Chatgpt):

  1. import tkinter as tk
  2. from tkinter import font
  3.  
  4. class Calculator:
  5.      def __init__(self, master):
  6.          self.master = master
  7.          master.title("Calculator")
  8.          master.geometry("350x560")
  9.          master.resizable(width=False, height=False)
  10.  
  11.          # 设置按钮和文本框字体
  12.          self.button_font = font.Font(size=20)
  13.          self.equation_font = font.Font(size=30)
  14.  
  15.          # 创建显示方程的文本框
  16.          self.equation = tk.Entry(master, width=12, font=self.equation_font, borderwidth=0, justify=tk.RIGHT)
  17.          self.equation.grid(row=0, column=0, columnspan=4, padx=10, pady=20, ipady=15)
  18.  
  19.          # 创建数字按钮
  20.          self.create_button("C", 1, 0, bg="white", fg="black", width=4, height=2)
  21.          self.create_button("", 1, 1, bg="white", fg="black", width=4, height=2)
  22.          self.create_button("%", 1, 2, bg="white", fg="black", width=4, height=2)
  23.          self.create_button("", 1, 3, bg="#FF9500", fg="white", width=4, height=2)
  24.  
  25.          self.create_button("7", 2, 0, bg="#E4E4E4", fg="black")
  26.          self.create_button("8", 2, 1, bg="#E4E4E4", fg="black")
  27.          self.create_button("9", 2, 2, bg="#E4E4E4", fg="black")
  28.          self.create_button("", 2, 3, bg="#FF9500", fg="white", width=4, height=2)
  29.  
  30.          self.create_button("4", 3, 0, bg="#E4E4E4", fg="black")
  31.          self.create_button("5", 3, 1, bg="#E4E4E4", fg="black")
  32.          self.create_button("6", 3, 2, bg="#E4E4E4", fg="black")
  33.          self.create_button("-", 3, 3, bg="#FF9500", fg="white", width=4, height=2)
  34.  
  35.          self.create_button("1", 4, 0, bg="#E4E4E4", fg="black")
  36.          self.create_button("2", 4, 1, bg="#E4E4E4", fg="black")
  37.          self.create_button("3", 4, 2, bg="#E4E4E4", fg="black")
  38.          self.create_button("+", 4, 3, bg="#FF9500", fg="white", width=4, height=2)
  39.  
  40.          self.create_button("0", 5, 0, bg="#E4E4E4", fg="black", width=8)
  41.          self.create_button(".", 5, 2, bg="#E4E4E4", fg="black")
  42.          self.create_button("=", 5, 3, bg="#FF9500", fg="white", width=4, height=2)
  43.  
  44.      def create_button(self, text, row, column, bg="#F0F0F0", fg="black", width=2, height=1):
  45.          # 创建按钮
  46.          button = tk.Button(self.master, text=text, bg=bg, fg=fg, width=width, height=height, font=self.button_font,
  47.                      borderwidth=0, command=lambda: self.button_click(text))
  48.          button.grid(row=row, column=column, padx=5, pady=5, ipady=5, sticky="NSEW")
  49.  
  50.      def button_click(self, text):
  51.          if text == "C":
  52.              self.equation.delete(0, tk.END)
  53.          elif text == "":
  54.              equation = self.equation.get()
  55.              if equation.startswith("-"):
  56.                  self.equation.delete(0)
  57.                  self.equation.insert(0, equation[1:])
  58.              elif equation:
  59.                  self.equation.insert(0, "-")
  60.          elif text == "%":
  61.              equation = self.equation.get()
  62.              try:
  63.                  result = float(equation) / 100
  64.                  self.equation.delete(0, tk.END)
  65.                  self.equation.insert(0, result)
  66.              except ValueError:
  67.                  pass
  68.          elif text in ["+", "-", "", ""]:
  69.              if self.equation.get() and not self.equation.get().endswith(("+", "-", "", "")):
  70.                  self.equation.insert(tk.END, text)
  71.          elif text == ".":
  72.              if self.equation.get() and "." not in self.equation.get():
  73.                  self.equation.insert(tk.END, ".")
  74.              elif not self.equation.get():
  75.                  self.equation.insert(tk.END, "0.")
  76.          elif text == "=":
  77.              equation = self.equation.get()
  78.              try:
  79.                  result = eval(equation)
  80.                  self.equation.delete(0, tk.END)
  81.                  self.equation.insert(0, result)
  82.              except (SyntaxError, ZeroDivisionError):
  83.                  self.equation.delete(0, tk.END)
  84.                  self.equation.insert(0, "Error")
  85.  
  86.          else:
  87.              self.equation.insert(tk.END, text)
  88.  
  89. # 创建主窗口
  90. root = tk.Tk()
  91.  
  92. # 创建计算器 GUI
  93. calculator = Calculator(root)
  94.  
  95. # 进入主事件循环
  96. root.mainloop()

这段代码还有很多值得修改的地方,如果你有兴趣可以试试。

标签: python