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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTP协议及应用

一.HTTP协议 1.HTTP协议版本 HTTP1.0:服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态); HTTP1.1:KeepAlived长连接避免了连接建立和…

【平衡二叉树】AVL树(双旋)

🎉博主首页: 有趣的中国人 🎉专栏首页: C进阶 🎉其它专栏: C初阶 | Linux | 初阶数据结构 小伙伴们大家好,本片文章将会讲解AVL树的左双选和右双旋的相关内容。 如果看到最后您觉得这篇文章写…

鸿蒙内核源码分析 (内核启动篇) | 从汇编到 main ()

这应该是系列篇最难写的一篇,全是汇编代码,需大量的底层知识,涉及协处理器,内核镜像重定位,创建内核映射表,初始化 CPU 模式栈,热启动,到最后熟悉的 main() 。 内核入口 在链接文件…

知了汇智引领未来:全新AIGC系列课程,打造数字时代人才新标杆

在全球AIGC(生成式人工智能)技术加速发展的背景下,一系列权威报道揭示了该领域内市场潜力、行业应用、教育研究、政府监管以及具体应用场景的蓬勃进展。据腾讯网4月19日报道,中国AIGC应用市场规模预计于2024年达到200亿人民币&…

FART 不需要刷机,通过脚本动态脱抽取壳

准备环境 adb , 见上一篇文章;frida-fart, https://github.com/hanbinglengyue/FART;frida, 参考上一篇文章 工具配置 解压该文件后,将lib文件夹中的fart.so和fart64.so拷贝到/data/app目录下,如果需要管理员权限,通过adb root…

C#窗体程序设计笔记:如何调出控件工具箱,并设置控件的属性

文章目录 调出控件工具箱设置控件属性 调出控件工具箱 使用Visual Studio打开C#解决方案后,初始界面如下图所示: 接着,在上方的菜单栏依次选择“视图”“工具箱”,即可打开工具箱,如下图所示: 设置控件属…

Jmeter 性能-阶梯式性能指标监听

例如:现要加载100个线程,希望聚合报告中分别展示:1-20,20-40,40-60,60-80的四个阶段的线程并发性能数据,而不是一并总体的统计数据。 实现方法:Jmeter通过自定义代码去实现 ①添加…

山东济南中国当代文化名人颜廷利:大自然赋予人类众生的真正贵重礼物

大自然赋予了众生---火(太阳,万物生长靠太阳)、水(河流,水是生命之源)、木(空气,生命就在一翕一合的呼吸之间)、土(大地,坤为大地之母&#xff0c…

爱普生M-A352加速度计受到日本气象厅认证

地震一直是缠在人们头顶的乌云,如何能在地震发生的时候提前获悉,防止造成更大的经济损失,成为了许多企业准备解决的问题。精工爱普生公司获悉,东京Knowledge ForesightInc.生产的配备爱普生M-A352 高性能三轴加速度计的“Yure Mon…

电力物联网-(2)系统设计

电力物联网系统设计 前言 在此之前写过《电力物联网系统设计》开篇文章,上一篇文章主要的概述性的内容,发表之后总觉得对电力物联网系统设计这一方面还只是开了一个头,没有把相关的内容讲解清楚,于是经过一段时间的构思终于产出了…

开源相机管理库Aravis例程学习(七)——chunk-parser

开源相机管理库Aravis例程学习(七)——chunk-parser 简介例程代码函数说明arv_camera_create_chunk_parserarv_camera_set_chunksarv_chunk_parser_get_integer_value 简介 本文针对官方例程中的:05-chunk-parser做简单的讲解。并介绍其中调…

Spring Framework-简介

Spring Framework Java Spring是一个开源的Java应用框架,它的主要目的是简化企业级应用开发的复杂性。Spring框架为开发者提供了许多基础功能,使得开发者能够更专注于业务逻辑的实现,而不是底层的细节。 主要特点和功能: 控制反…

怎么识别数学公式?分享简单识别方法

怎么识别数学公式?在学术研究和日常工作中,数学公式无疑是一个常见且重要的元素。然而,手动输入复杂的数学公式往往既耗时又容易出错。幸运的是,随着科技的发展,现在我们有了一些高效的软件工具,可以帮助我…

C语言----斐波那契数列(附源代码)

各位看官们好,当我写了上一篇博客杨辉三角后,有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)f(n-2)f(n-1)。就是当前是前两项之和,然后下标1和0都是1.从第三项开始计算的。那么我们知道规律&#xff0…

纯电动汽车的发展趋势简述

纯电车简介 纯电动汽车是使用电池驱动电动马达而不是传统的内燃机的汽车。它们通常使用电池组储存能量,然后通过电动马达转化为动力来驱动车辆。相比于传统的燃油车,纯电动汽车具有零排放、低噪音、低维护成本等优点,因此在环保和能源效率方…

MATLAB蚁群算法求解带时间窗的旅行商TSPTW问题代码实例

MATLAB蚁群算法求解带时间窗的旅行商TSPTW问题代码实例 蚁群算法编程求解TSPTW问题实例: 在经纬度范围为(121, 43)到(123, 45)的矩形区域内,散布着1个商家(编号1)和25个顾客点(编号为226),各个…

Go-Zero定义API实战:探索API语法规范与最佳实践(五)

前言 上一篇文章带你实现了Go-Zero模板定制化,本文将继续分享如何使用GO-ZERO进行业务开发。 通过编写API层,我们能够对外进行接口的暴露,因此学习规范的API层编写姿势是很重要的。 通过本文的分享,你将能够学习到Go-Zero的API…

【御控物联】Java JSON结构转换、JSON协议转换、JSON属性互换(15):对象To数组——转换映射方式

文章目录 一、JSON结构转换是什么?二、术语解释三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

如何压缩图片大小?7个实用软件教你快速压缩图片大小

如何压缩图片大小?7个实用软件教你快速压缩图片大小 以下是七个实用的软件,可以帮助您快速压缩图片大小: 图片编辑助手:这是一款功能强大的图像处理软件,其中包含了图像压缩功能。您可以打开需要压缩的图片&#xf…

Java 包语句,看这一篇就够了

1.设计的文件层级 我们将“Package”文件夹称为根目录,“Level01”称为一级目录,“Level02”称为二级目录,以此类推。 2.发现在不同目录下的包名有如下特征: 根目录下的文件不需要包名,可以理解成包名为 “”一级目录…