Chatgpt教你使用Python开发iPhone风格计算器

news2024/11/20 16:36:49

上次使用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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1675094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux防火墙iptalbes

1 iptalbes 1.1 概念 防火墙(Firewall)是一种隔离技术,用于安全管理与筛选的软件和硬件设备,使计算机内网和外网分开,可以防止外部网络用户以非法手段通过外部网络进入内部网络,保护内网免受外部非法用户的侵入。 1.2 SELinux …

【瑞萨RA6M3】2. UART 实验

https://blog.csdn.net/qq_35181236/article/details/132789258 使用 uart9 配置 打印 void hal_entry(void) {/* TODO: add your own code here */fsp_err_t err;uint8_t c;/* 配置串口 */err g_uart9.p_api->open(g_uart9.p_ctrl, g_uart9.p_cfg);while (1){g_uart9.…

有 10000 个 if else 该如何优化?被问懵了!

这个问题可以看作是一道场景题,它考察一个程序员在面对复杂逻辑判断时的优化能力,也是在考察一个程序员临场发挥技术能力。 方案1:策略模式 使用策略模式确实可以提升代码的优雅性,但也会存在以下问题: 如果是大量的…

代码随想录算法训练营Day 42| 动态规划part04 | 01背包问题理论基础I、01背包问题理论基础II、416. 分割等和子集

代码随想录算法训练营Day 42| 动态规划part04 | 01背包问题理论基础I、01背包问题理论基础II、416. 分割等和子集 文章目录 代码随想录算法训练营Day 42| 动态规划part04 | 01背包问题理论基础I、01背包问题理论基础II、416. 分割等和子集01背包问题理论基础一、01背包问题二、…

Transformer 模型

文章目录 前言一、模型结构 前言 Transformer 模型是由谷歌在 2017 年提出并首先应用于机器翻译的神经网络模型结构。机器翻译的目标是从源语言(Source Language)转换到目标语言(Target Language)。Transformer 结构完全通过注意力…

JS中的宏任务和微任务

JavaScript 引擎是建立在一个事件循环系统之上的,它实时监控事件队列,如果有事件就执行,如果没有事件就等待。事件系统是一个典型的生产消费模式,生产者发出事件,接收者监听事件,在UI 开发中是常见的一个设…

电源模块效率的正确测试方法

电源效率是评价电源性能的重要指标,它直接关系到设备的稳定性和能源的利用效率。因此,对电源进行效率测试显得尤为重要。电源在工作过程中,会有部分能量损耗,因此,电源效率的高低,不仅影响着设备的性能&…

CentOS 磁盘扩容与创建分区

文章目录 未分配空间创建新分区重启服务器添加物理卷扩展逻辑卷 操作前确认已给服务器增加硬盘或虚拟机已修改硬盘大小(必须重启服务才会生效)。 未分配空间 示例说明:原服务器只有40G,修改虚拟机硬盘大小再增加20G后硬盘变为60G。…

Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树

Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树 目录 Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树 一、简单介绍 二、监督学习 算法 说明前的 数…

用Python的pynput库成为按键记录高手

哈喽,大家好,我是木头左! 揭秘键盘输入:pynput库的基本介绍 无论是为了安全审计、数据分析还是创建热键操作,能够记录和处理键盘事件都显得尤为关键。这就是pynput库发挥作用的地方。pynput是一个Python库&#xff0c…

CentOS报错: Fontconfig head is null, check your fonts or fonts configuration

错误 解决方案 这个报错的原因时java读取本地字体时发现字体损坏或者缺失,只需要补充一下字体就可以了,解决方法安装FontConfig组件即可: sudo yum install fontconfig

AIConnect 综合算力服务网络:引领智能未来,创造无限可能性!

2022年11月30日,由OpenAI开发的大模型聊天机器人GPT-3发布,首个完全意义上通过图灵测试的人工智能诞生了。这一里程碑事件的启发了人们对AI技术的发展和应用。在短短两年的时间里,各式各样的聊天AI,图片生成AI,视频生成…

5.10.4 Vision Transformer的条件位置编码(CPE)

用于视觉 Transformer 的条件位置编码(CPE)方案与之前预定义且独立于输入标记的固定或可学习位置编码不同,CPE 是动态生成的,并以输入标记的局部邻域为条件。 CPE 可以轻松泛化到比模型在训练期间见过的输入序列更长的输入序列。…

官宣!MongoDB Atlas再添新功能!进一步简化构建现代应用程序

亮点前瞻 ● MongoDB Atlas Stream Processing全面可用,开发者能够更轻松地使用实时数据,在统一环境中构建事件驱动型应用程序 ●MongoDB Atlas Search Nodes上线 Microsoft Azure,组织能够隔离和扩展生成式AI工作负载,并将查询…

Naive RAG 、Advanced RAG 和 Modular RAG 简介

简介: RAG(Retrieval-Augmented Generation)系统是一种结合了检索(Retrieval)和生成(Generation)的机制,用于提高大型语言模型(LLMs)在特定任务上的表现。随…

串联所有单词的子串 ---- 滑动窗口

题目链接 题目: 分析: 我们上次做的题目, 是找到所有字符的异位词, 和这道题有些类似, 使用记录有效字符的个数找到子字符, 此题无非是把字符变成了字符串题目回顾 有一下几方面不同, 我们以示例1为例: 1. 哈希表 上次我们使用的是哈希数组, 因为数组的下标可以是字符, 现…

elasticsearch-head 源码运行

1、下载安装nodejs 地址:Node.js — Run JavaScript Everywhere 2、git下载 elasticsearch-head 源码 地址:GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster 3、使用cmd 进入 elasticsearch-head 目录 4、依次执…

C for Graphic:遮罩显示(一)

模板缓冲一般用于遮罩渲染的功能,其原理很以前聊过(模板缓冲原理),就不再啰嗦了。 现在实现一个功能:使用一个长方体(或任意物体)遮罩渲染对象(比如一个球)。 …

好用无广的桌面便签app 能管理待办事项的便签软件

在忙碌的工作和生活中,我们每天都面临着大量的待办事项。这些琐碎却重要的事务很容易混淆或遗忘,给我们带来不必要的麻烦和压力。幸运的是,选择一款优秀的便签app,可以有效地帮助我们管理这些待办事项,让工作和生活更加…