python GUI计算器的实现
作者:叫我龙总 发布时间:2021-11-30 01:00:53
标签:python,gui,计算器
01 实现
我们几乎每个人都用过计算器,大家对于计算器应该都是比较熟悉的,计算器整体也是比较简单的,主要包括:显示器、键盘、运算的逻辑处理等,计算器的图形界面我们使用 tkinter 库实现,下面看一下具体实现过程。
首先,我们画一个主窗口,代码实现如下:
# 创建主窗口
tk = tkinter.Tk()
# 设置窗口大小和位置
tk.geometry('300x210+500+200')
# 不允许改变窗口大小
tk.resizable(False, False)
# 设置窗口标题
tk.title('计算器')
看一下效果:
我们接着画显示器,代码实现如下:
# 自动刷新字符串变量,可用 set 和 get 方法进行传值和取值
contentVar = tkinter.StringVar(tk, '')
# 创建单行文本框
contentEntry = tkinter.Entry(tk, textvariable=contentVar)
# 设置文本框为只读
contentEntry['state'] = 'readonly'
# 设置文本框坐标及宽高
contentEntry.place(x=20, y=10, width=260, height=30)
看一下效果:
再接着画键盘,代码实现如下:
# 按钮显示内容
bvalue = ['C', '+', '-', '//', '2', '0', '1', '√', '3', '4', '5', '*', '6', '7', '8', '.', '9', '/', '**', '=']
index = 0
# 将按钮进行 5x4 放置
for row in range(5):
for col in range(4):
d = bvalue[index]
index += 1
btnDigit = tkinter.Button(tk, text=d, command=lambda x=d: onclick(x))
btnDigit.place(x=20 + col * 70, y=50 + row * 30, width=50, height=20)
看一下效果:
界面画完了,我们看一下处理运算逻辑的代码,如下所示:
# 点击事件
def onclick(btn):
# 运算符
operation = ('+', '-', '*', '/', '**', '//')
# 获取文本框中的内容
content = contentVar.get()
# 如果已有内容是以小数点开头的,在前面加 0
if content.startswith('.'):
content = '0' + content # 字符串可以直接用+来增加字符
# 根据不同的按钮作出不同的反应
if btn in '0123456789':
# 按下 0-9 在 content 中追加
content += btn
elif btn == '.':
# 将 content 从 +-*/ 这些字符的地方分割开来
lastPart = re.split(r'\+|-|\*|/', content)[-1]
if '.' in lastPart:
# 信息提示对话框
tkinter.messagebox.showerror('错误', '重复出现的小数点')
return
else:
content += btn
elif btn == 'C':
# 清除文本框
content = ''
elif btn == '=':
try:
# 对输入的表达式求值
content = str(eval(content))
except:
tkinter.messagebox.showerror('错误', '表达式有误')
return
elif btn in operation:
if content.endswith(operation):
tkinter.messagebox.showerror('错误', '不允许存在连续运算符')
return
content += btn
elif btn == '√':
# 从 . 处分割存入 n,n 是一个列表
n = content.split('.')
# 如果列表中所有的都是数字,就是为了检查表达式是不是正确的
if all(map(lambda x: x.isdigit(), n)):
content = eval(content) ** 0.5
else:
tkinter.messagebox.showerror('错误', '表达式错误')
return
# 将结果显示到文本框中
contentVar.set(content)
整体实现完了之后,我们来演示一下,看一下效果:
是不是有内味了。
02 打包
为了更加方便的使用,我们可以将 Python 代码打包成 exe 文件,打包我们使用 pyinstaller,安装用 pip install pyinstaller 命令即可。
打包时我们使用 pyinstaller --onefile --nowindowed counter.py 命令即可,此时打包生成的文件是使用的默认图标,如果我们想指定自己的图标可以添加参数 --icon="xxx\xxx.ico",打包生成的文件在 dist 目录。
如下图所示:
此时,我们直接运行 exe 文件就行了。
03 总结
本文我们使用 Python 实现了一个简易的计算器,大家如果有兴趣的话,可以尝试添加更多的功能以及对键盘进行个性化修改。
来源:https://cloud.tencent.com/developer/article/1709741


猜你喜欢
- MySQL安装文件已被广泛应用但是也在不断的更新,这里介绍MySQL安装文件设置使用,帮助大家安装更新MySQL安装文件系统。Fedora5
- 一、创建excel代码备注:封装好了(可直接调用)"""-*- coding:utf-8 -*-@Time :
- 下面一段代码给大家介绍python 脚本生成随机 字母 + 数字密码功能,具体代码如下所述:#coding:utf-8import rand
- varint今天本来在研究 OpenTelemetry 的基准性能测试 github.com/zdyj3170101…
- 突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table
- 本文实例讲述了Python素数检测的方法。分享给大家供大家参考。具体如下:因子检测:检测因子,时间复杂度O(n^(1/2))def is_p
- QSlider 是一个具有可来回拉动手柄的控件。有时使用滑块比输入数字或使用旋转框更方便。在我们的例子中,我们将创建一个滑块和一个标签。标签
- 1:获取对象的三种方法1)document.getElementById(id);通过对象的属性id来获取;2)element.getEle
- 我个人感觉数据库这方面对于程序员来说很重要,无论是对于JAVA程序员还是DOTNET程序员以及其他编程人员来说都是必须掌握的。为了帮助大家更
- mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表CREATE TABLE 新表 SELECT * FR
- 如何在Access数据库中立即得到所插入记录的自动编号?首先,我们要保证获得记录集的方式支持bookmark属性,如在1、3插入一条有自动编
- 终于把promise, async, await的区别和联系弄清楚了,看下面代码写法1,2是promise的写法写法6是async和awai
- 一、多态多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等。(一个抽象类有多个子类,因而多态的概念依赖于继承)import abc
- 这个问题用了我整整一晚上的时间才解决,希望有人遇到和我一样的时能少走些弯路。启动Django,服务器拒绝访问,可以尝试以下方法解决:1. 没
- 引言当我们想到“pythonic”时,理解,如列表和字典理解是 Python 的一个特性。这是我们执
- 环境:python3.5,pycharm2017.2.3目录结构a.pyt=5b.pyfrom a import tprint(t)平台显示
- 在MySQL中,一个字符串中,如果某个序列具有特殊的含义,则这个序列以反斜线符号(‘\’)开头,称为转义字符。常见的转义字符:\0 ASCI
- <P><HTML><HEAD><TITLE>javascriptboy</TITLE&
- 解决了ACCESS数据库路径的问题!采用DBType=0或DBType=1来区分AC库还是MSSQL库具体采用AC库时应注意的事项,请看程序
- 1 逻辑数据库和表的设计数据库的逻辑设计、包括表与表之间的关系是优化关系型数据库性能的核心。一个好的逻辑数据库设计可以为优化数据库和应用程序