GUI 图形用户界面编程(十)-简单计算器页面

   ✨✨✨

感谢优秀的你打开了小白的文章 

希望在看文章的你今天又进步了一点点,离美好生活更近一步!🌈

前言 

Python 使用 Tkinter 可以快速的创建 GUI 应用程序。我们可以用它来实现一个简易计算器。

 大致是这种,调整行列之间的距离。

 

代码实例 

from tkinter import *
from tkinter import messagebox
import random

class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)       
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """通过grid布局实现计算器的界面"""
        btnText = (("MC","M+","M-","MR"),
                   ("C","±","/","✖️"),
                   (7,8,9,"-"),
                   (4,5,6,"+"),
                   (1,2,3,"="),
                   (0,"."))

        Entry(self).grid(row=0,column=0,columnspan=4,pady=10)

        for rindex,r in enumerate(btnText):
            for cindex,c in enumerate(r):
                if c == "=":
                    Button(self,text=c,width=2)\
                    .grid(row=rindex+1,column=cindex,rowspan=2,sticky=NSEW)
                elif c == 0:
                    Button(self,text=c,width=2)\
                    .grid(row=rindex+1,column=cindex,columnspan=2,sticky=NSEW)

                elif c == ".":
                    Button(self,text=c,width=2)\
                    .grid(row=rindex+1,column=cindex+1,sticky=NSEW)
                else:
                    Button(self,text=c,width=2)\
                    .grid(row=rindex+1,column=cindex,sticky=NSEW)

if __name__ == '__main__':
    root = Tk()
    root.geometry("200x200+200+300")
    app = Application(master=root)
    root.mainloop()

运行结果: 

 上述的只是一个框架,若要实现功能

计算器页面 

import tkinter
import tkinter.messagebox
import re

operators=('+','-','*','/','**','//')

def buttonClick(btn):
    val=contentVar.get()
    if val.startswith('.'):
        val='0'+val
    if btn in '0123456789':
        val+=btn
    elif btn=='.':
        t=re.split(r'[\+|-|\*|/]',val)[-1]
        if t in '.':
            tkinter.messagebox.showerror('Error', 'Digits format error!') 
            return
        else:
            val+=btn
    elif btn=='C':
        val=''
    elif btn=='=':
        try:
            val=str(eval(val))      #计算字符串表达式值
        except:
            tkinter.messagebox.showerror('Error','Expression error!')    
            return
    elif btn in operators:
        if val.endswith(operators):
            tkinter.messagebox.showerror('Error', 'Format error!')
            return
        val+=btn
    elif btn=='sqrt':
        n=val.split('.')
        if all(map(lambda x:x.isdigit(),n)):
            val=eval(val)**0.5
        else:
            tkinter.messagebox.showerror('Error','Expression error!')
            return
    contentVar.set(val)
    
root=tkinter.Tk()
root.geometry('300x300+500+100')
root.resizable(False, False)    
root.title('Calculator')

contentVar=tkinter.StringVar(root,'')
contentEntry=tkinter.Entry(root,textvariable=contentVar,bg='red')
contentEntry['state']='readonly'
contentEntry.place(x=10,y=10,width=280,height=50)

grids=['//','**','sqrt','C']+list('789+456-123*0./=')
t=0
for i in range(5):
    for j in range(4):
        btn=tkinter.Button(root,text=grids[t],command=lambda x=grids[t]:buttonClick(x))
        btn.place(x=20+j*64,y=80+i*40,width=63,height=36)
        t+=1

root.mainloop()

结果如下: 

 

 

  🚀往期回顾

📣GUI 图形用户界面编程(一): (278条消息) GUI 图形用户界面编程(一)_am_student的博客-CSDN博客

📣GUI 图形用户界面编程(二):

(278条消息) GUI 图形用户界面编程(二)经典案例_am_student的博客-CSDN博客

📣GUI 图形用户界面编程(三):

(278条消息) GUI 图形用户界面编程(三)基本框架与Label的使用_am_student的博客-CSDN博客

📣GUI 图形用户界面编程(四):

 (278条消息) GUI 图形用户界面编程(四)-Button组件_am_student的博客-CSDN博客

📣GUI 图形用户界面编程(五):

(357条消息) GUI 图形用户界面编程(五)-登录页面_am_student的博客-CSDN博客

更多有趣的请关注公众号:

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值