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 实现了一个简易的计算器,大家如果有兴趣的话,可以尝试添加更多的功能以及对键盘进行个性化修改。
以上就是python GUI计算器的实现的详细内容,更多关于python 计算器的资料请关注其它相关文章!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 《暗喻幻想》顺风耳作用介绍
- 崔健1985-梦中的倾诉[再版][WAV+CUE]
- 黄子馨《追星Xin的恋人们2》HQ头版限量编号[WAV+CUE]
- 孟庭苇《情人的眼泪》开盘母带[低速原抓WAV+CUE]
- 孙露《谁为我停留HQCD》[低速原抓WAV+CUE][1.1G]
- 孙悦《时光音乐会》纯银CD[低速原抓WAV+CUE][1.1G]
- 任然《渐晚》[FLAC/分轨][72.32MB]
- 英雄联盟新英雄安蓓萨上线了吗 新英雄安蓓萨技能介绍
- 魔兽世界奥杜尔竞速赛什么时候开启 奥杜尔竞速赛开启时间介绍
- 无畏契约CGRS准星代码多少 CGRS准星代码分享一览
- 张靓颖.2012-倾听【少城时代】【WAV+CUE】
- 游鸿明.1999-五月的雪【大宇国际】【WAV+CUE】
- 曹方.2005-遇见我【钛友文化】【WAV+CUE】
- Unity6引擎上线:稳定性提升、CPU性能最高提升4倍
- 人皇Sky今日举行婚礼!电竞传奇步入新篇章