iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何利用python的tkinter实现一个简单的计算器
  • 158
分享到

如何利用python的tkinter实现一个简单的计算器

2024-04-02 19:04:59 158人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1.准备工作2. 开始2.1 生成控件2.2 定义输入和计算函数2.3 绑定键盘事件2.4 循环3.全部代码4. 结束语做一个计算器,这是我想要达成的效果: 在按下按钮或者按下

做一个计算器,这是我想要达成的效果:

在按下按钮或者按下键盘的时候,第一行输入框会显示输入的内容,第二行显示框则会预览运算结果,如果发生异常,输入内容格式错误,无法计算,则显示框显示“错误”。

按“=”按钮或按键回车计算结果,结果显示在第一行。

1.准备工作

导入库 tkinter


import tkinter as tk

2. 开始

定义两个变量:


equal_is=False      #定义一些变量
textchange=''

equal_is 用于判断是否已经计算出结果,textchange是用于设置输入框的内容。

2.1 生成控件

首先生成窗体:


root=tk.Tk()        #创建窗体
root.geometry('250x350')
root.title('计算器')

为了方便,在这里定义一个函数 create_btn


def create_btn(text,col,row,cs,rs,pri='',px=(1,1),py=(1,1)):   #函数:生成按钮
    if pri=='':
        t=text
    else:
        t=pri
    a=tk.Button(root,text=text,width=4,command=lambda:(text_print(t)))	#输入内容
    a.grid(column=col,row=row,columnspan=cs,rowspan=rs,padx=px,pady=py,sticky='nswe')
    return(a)

因为有些按钮的输入内容并不等于它的文本内容(比如按钮“×”,输入“*”),因此我们设置一个空的参数 pri ,在 pri 没有被赋值的时候,输入内容则为 text 。

text_print 是输入内容的函数,这个在后面会定义。


btn={}                                  #生成按钮
btn['1']=create_btn('1',0,5,1,1)
btn['2']=create_btn('2',1,5,1,1)
btn['3']=create_btn('3',2,5,1,1)
btn['4']=create_btn('4',0,4,1,1)
btn['5']=create_btn('5',1,4,1,1)
btn['6']=create_btn('6',2,4,1,1)
btn['7']=create_btn('7',0,3,1,1)
btn['8']=create_btn('8',1,3,1,1)
btn['9']=create_btn('9',2,3,1,1)
btn['0']=create_btn('0',0,6,2,1)

btn['.']=create_btn('.',2,6,1,1)
btn['=']=create_btn('=',4,5,1,2)
btn['+']=create_btn('+',3,6,1,1)
btn['-']=create_btn('-',3,5,1,1)
btn['*']=create_btn('×',3,4,1,1,pri='*')
btn['/']=create_btn('÷',4,4,1,1,pri='/')
btn['←']=create_btn('←',1,2,1,1)

btn['C']=create_btn('C',2,2,1,1)
btn['(']=create_btn('(',3,2,1,1)
btn[')']=create_btn(')',4,2,1,1)
btn['**2']=create_btn('x²',3,3,1,1,pri='**2')
btn['**(-1)']=create_btn('1/x',4,3,1,1,pri='**(-1)')

上面是用 create_btn 函数生成每一个按钮。


la=tk.Label(root,text='',bg='white',fg='black',font=('宋体',24),anchor='w',relief='flat')  #生成输入框
la.grid(column=0,row=0,columnspan=5,rowspan=1,sticky='we')

lab=tk.Label(root,bg='white',fg='grey',height=1,font=('宋体',22),anchor='w',relief='flat')    #生成显示框
lab.grid(column=0,row=1,columnspan=5,rowspan=1,sticky='we')

上面创建两个标签,作为输入框和显示框。

la 是输入框,lab是显示框。

然后定义函数 grid_rowconfigure 和 grid_columnconfigure,用于自动填充行和列:


def grid_rowconfigure(*rows):   #函数填充行。*rows:允许接收多个参数
    for i in rows:
        root.grid_rowconfigure(i,weight=1)
        
def grid_columnconfigure(*cols):    #函数填充列。*cols:允许接收多个参数
    for i in cols:
        root.grid_columnconfigure(i,weight=1)

在窗体被改变大小时,按钮会自动填充四周,而输入、显示框只填充左右两边(第2,3,4,5,6行会向竖直方向填充,每一列都会向水平方向填充)。


grid_rowconfigure(2,3,4,5,6)
grid_columnconfigure(0,1,2,3,4)

2.2 定义输入和计算函数

定义 text_print 函数,当按钮被点击时输入内容,当按钮“=”被点击的时候计算结果:


def text_print(x):  #函数按钮输入算式
    global textchange,equal_is	#声明全局变量
    if x!='=':
        if x=='←':
            a=str(textchange)[0:-1]
            textchange=a	#退格
        elif x=='C':
            textchange=''	#清空
        else:
            textchange=str(textchange)+str(x)	#输入
        la.configure(text=textchange)
        show_is()
        equal_is=False	#判断格式有无错误
    if x=='=':
        text_equal()	#计算结果

show_is 用于判断格式有无错误:


def show_is():     #显示框内容
    global textchange	#声明全局变量
    if textchange!='':
        try:
            textshow=eval(textchange)
        except (SyntaxError,TypeError,NameError):
            lab.configure(text='错误')	#如果出错了,则显示“错误”
        else:
            lab.configure(text=textshow)	#如果没有出错,则显示结果
    else:
        lab.configure(text='')	#如果输入框为空,那么清空显示框

text_equal 是计算结果的函数:


def text_equal(event=None):   #函数计算结果并上到输入框
    global textchange,equal_is	#声明全局变量
    if lab['text']!='错误' and equal_is==False:
        textchange=lab['text']	#无格式错误时,计算结果
        la.configure(text=textchange)	#输入框显示结果
        lab.configure(text='')	#清空显示框
        equal_is=True

这里详细说明一下 equal_is 的作用:

因为计算了结果后显示框会清空,为了防止二次计算导致输入框也跟着清空,我们需要判断是否已经计算过结果,这时就用到变量 equal_is 。

当输入内容时,equal_is 变为 True,计算结果后,equal_is 变为 False,如果 equal_is == True,则不计算结果。

2.3 绑定键盘事件

我设置的键盘按键及其对应输入内容:

输入内容 对应按键
0~9 0~9
+ +
- -
* *
/ /
退格 BackSpace
清空 Delete
计算结果 Return(Enter键)

定义一个函数 bind_print,跟 text_print 有点相似,但有些不一样(原谅我技术差,不知道别的方法,只能重新定义一个函数):


def bind_print(event):  #函数键盘事件输入算式
    global textchange,equal_is
    if event.keysym!='Return':
        if event.keysym=='BackSpace':	#如果按键名等于“BackSpace”(退格键),那么就退格
            a=str(textchange)[0:-1]
            textchange=a
        elif event.keysym=='Delete':	#清空
            textchange=''
        else:
            textchange=str(textchange)+str(event.char)	#输入按键内容,char不会获得Ctrl,Shift等特殊按键的文本
        la.configure(text=textchange)	#显示内容
        show_is()	#判断是否错误
        equal_is=False
    else:
        text_equal()        

如果按下的是特殊按键,除非是退格和回车,否则都不会有反应,

按下字母、数字、符号键的时候,输入按键内容。

接下来就是绑定键盘事件了:


root.bind('<Key>',bind_print)	#当键盘按下任意键,执行bind_print

这样,界面布置和功能就完成了‘

2.4 循环

将主窗体root放入主循环中:


root.mainloop()

3.全部代码


import tkinter as tk

def create_btn(text,col,row,cs,rs,pri='',px=(1,1),py=(1,1)):   #函数生成按钮
    if pri=='':
        t=text
    else:
        t=pri
    a=tk.Button(root,text=text,width=4,command=lambda:(text_print(t)))
    a.grid(column=col,row=row,columnspan=cs,rowspan=rs,padx=px,pady=py,sticky='nswe')
    return(a)

def grid_rowconfigure(*rows):   #函数填充行
    for i in rows:
        root.grid_rowconfigure(i,weight=1)
        
def grid_columnconfigure(*cols):    #函数填充列
    for i in cols:
        root.grid_columnconfigure(i,weight=1)

def bind_print(event):  #函数键盘事件输入算式
    global textchange,equal_is
    if event.keysym!='Return':
        if event.keysym=='BackSpace':
            a=str(textchange)[0:-1]
            textchange=a
        elif event.keysym=='Delete':
            textchange=''
        else:
            textchange=str(textchange)+str(event.char)
        la.configure(text=textchange)
        show_is()
        equal_is=False
    else:
        text_equal()

def text_print(x):  #函数按钮输入算式
    global textchange,equal_is
    if x!='=':
        if x=='←':
            a=str(textchange)[0:-1]
            textchange=a
        elif x=='C':
            textchange=''
        else:
            textchange=str(textchange)+str(x)
        la.configure(text=textchange)
        show_is()
        equal_is=False
    if x=='=':
        text_equal()
    
def text_equal(event=None):   #函数计算结果并上到输入框
    global textchange,equal_is
    if lab['text']!='错误' and equal_is==False:
        textchange=lab['text']
        la.configure(text=textchange)
        lab.configure(text='')
        equal_is=True

def show_is():     #显示框内容
    global textchange
    if textchange!='':
        try:
            textshow=eval(textchange)
        except (SyntaxError,TypeError,NameError):
            lab.configure(text='错误')
        else:
            lab.configure(text=textshow)
    else:
        lab.configure(text='')

root=tk.Tk()        #创建窗体
root.geometry('250x350')
root.title('计算器')
root.bind('<Key>',bind_print)

equal_is=False      #定义一些函数
textchange=''

la=tk.Label(root,text='',bg='white',fg='black',font=('宋体',24),anchor='w',relief='flat')  #生成输入框
la.grid(column=0,row=0,columnspan=5,rowspan=1,sticky='we')

lab=tk.Label(root,bg='white',fg='grey',height=1,font=('宋体',22),anchor='w',relief='flat')    #生成显示框
lab.grid(column=0,row=1,columnspan=5,rowspan=1,sticky='we')

btn={}                                  #生成按钮
btn['1']=create_btn('1',0,5,1,1)
btn['2']=create_btn('2',1,5,1,1)
btn['3']=create_btn('3',2,5,1,1)
btn['4']=create_btn('4',0,4,1,1)
btn['5']=create_btn('5',1,4,1,1)
btn['6']=create_btn('6',2,4,1,1)
btn['7']=create_btn('7',0,3,1,1)
btn['8']=create_btn('8',1,3,1,1)
btn['9']=create_btn('9',2,3,1,1)
btn['0']=create_btn('0',0,6,2,1)

btn['.']=create_btn('.',2,6,1,1)
btn['=']=create_btn('=',4,5,1,2)
btn['+']=create_btn('+',3,6,1,1)
btn['-']=create_btn('-',3,5,1,1)
btn['*']=create_btn('×',3,4,1,1,pri='*')
btn['/']=create_btn('÷',4,4,1,1,pri='/')
btn['←']=create_btn('←',1,2,1,1)

btn['C']=create_btn('C',2,2,1,1)
btn['(']=create_btn('(',3,2,1,1)
btn[')']=create_btn(')',4,2,1,1)
btn['**2']=create_btn('x²',3,3,1,1,pri='**2')
btn['**(-1)']=create_btn('1/x',4,3,1,1,pri='**(-1)')

grid_rowconfigure(2,3,4,5,6)
grid_columnconfigure(0,1,2,3,4)

root.mainloop()

4. 结束语

以上就是做一个简单计算器的过程,效果如开头所示。

本人技术还较差,欢迎向我提出任何的意见。

到此这篇关于如何利用python的tkinter实现一个简单的计算器的文章就介绍到这了,更多相关Python tkinter简单计算器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 如何利用python的tkinter实现一个简单的计算器

本文链接: https://www.lsjlt.com/news/124127.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何利用python的tkinter实现一个简单的计算器
    目录1.准备工作2. 开始2.1 生成控件2.2 定义输入和计算函数2.3 绑定键盘事件2.4 循环3.全部代码4. 结束语做一个计算器,这是我想要达成的效果: 在按下按钮或者按下...
    99+
    2022-11-12
  • python如何使用tkinter做个简单的计算器
    这篇文章主要介绍了python如何使用tkinter做个简单的计算器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。设计思路首先,导入我们需要的包 — tkinter,并通过 ...
    99+
    2023-06-14
  • 基于python的Tkinter实现一个简易计算器
    本文实例介绍了基于python的Tkinter实现简易计算器的详细代码,分享给大家供大家参考,具体内容如下 第一种:使用python 的 Tkinter实现一个简易计算器 #coding:utf-8 ...
    99+
    2022-06-04
    计算器 简易 python
  • 基于Python+Tkinter实现一个简易计算器
    目录设计原理示例效果主要代码设计原理 从结构上来说,一个简单的图形界面,需要由界面组件、组件的事件监听器(响应各类事件的逻辑)和具体的事件处理逻辑组成。界面实现的主要工作是创建各个界...
    99+
    2022-11-12
  • 利用Python实现一个简单的Web汇率计算器
    目录Dash是什么网页搭建步骤安装相关依赖(库)导入相关包构建app构建结果输出函数网页结构Layout搭建callback回调参数设定界面效果前段时间刚接触到前端网页开发,但是对于...
    99+
    2022-11-11
  • python tkinter 做个简单的计算器的方法
    背景 最近本菜鸡在学习 python GUI,从 tkinter 入门,想先做个小软件练习一下 思来想去,决定做一个 计算器 设计思路 首先,导入我们需要的包 — tkinte...
    99+
    2022-11-12
  • 利用Android实现一个简单的计算器功能
    今天就跟大家聊聊有关利用Android实现一个简单的计算器功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 安卓计算器Android <wbr>calcula...
    99+
    2023-05-31
    android roi
  • 基于Python+Tkinter怎么实现一个简易计算器
    这篇文章主要介绍“基于Python+Tkinter怎么实现一个简易计算器”,在日常操作中,相信很多人在基于Python+Tkinter怎么实现一个简易计算器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于P...
    99+
    2023-06-26
  • 怎么用python tkinter实现简单计算器功能
    这篇文章主要讲解了“怎么用python tkinter实现简单计算器功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用python tkinter实现简单计算器功能...
    99+
    2023-06-29
  • Java如何实现一个简单计算器
    这篇文章主要介绍了Java如何实现一个简单计算器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先来看看界面效果:源码如下:package test1; i...
    99+
    2023-06-22
  • 用java编写一个简单的计算器
    文章目录 一、switch 二、switch 和 调用参数 总结 一、switch 代码如下(示例):   import java.util.Scanner;public class Calculator { ...
    99+
    2023-10-03
    java
  • python的tkinter如何实现简单登录
    这篇文章主要介绍“python的tkinter如何实现简单登录”,在日常操作中,相信很多人在python的tkinter如何实现简单登录问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python的tkinte...
    99+
    2023-06-22
  • js实现一个简易的计算器
    利用原生js实现一个简易的计算器(附详细注释),供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en"> <...
    99+
    2022-11-12
  • python实现简单的计算器功能
    本文实例为大家分享了python实现简单计算器的具体代码,供大家参考,具体内容如下 今天学习到python中界面设计部分,常用的几种图形化界面库有:Jython、wxPython和t...
    99+
    2022-11-11
  • Python实现简单的四则运算计算器
    一、算法 1、算法的主要思想就是将一个中缀表达式(Infix expression)转换成便于处理的后缀表达式(Postfix expression),然后借助于栈这个简单的数据结构,计算出表达式...
    99+
    2022-06-04
    计算器 简单 Python
  • 如何用C语言编写一个简单的计算器
    这期内容当中小编将会给大家带来有关如何用C语言编写一个简单的计算器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。描述:简单的实现四则运算1.switch法#include<stdio.h>vo...
    99+
    2023-06-06
  • 用Python实现一个简单的WebSoc
    ubuntu下python2.76 windows python 2.79, chrome37 firefox35通过 代码是在别人(cddn有人提问)基础上改的, 主要改动了parsedata和sendmessage这2个函数. 改代码...
    99+
    2023-01-31
    简单 Python WebSoc
  • 用python写一个支持加减乘除的简单计算器
    # 计算器程序def add(x, y): return x + ydef subtract(x, y): return x - ydef multiply(x, y): return x * ydef divide(x,...
    99+
    2023-10-22
    其他 Powered by 金山文档
  • Android Studio:一个简单的计算器app的实现过程<初级>
    📌Android Studio 专栏正在持续更新中,案例的原理图解析、各种模块分析💖这里都有哦,同时也欢迎大家订阅专栏,获取更多详细信息哦✊✊✊ ✨个人主页:零小唬...
    99+
    2023-10-10
    android studio android java
  • 如何利用Java AWT 创建一个简易计算器
    目录一、关于AWT二、逻辑部分1.对于数字按钮2.对于算术按钮3.对于等号按钮4.对于清除按钮5.对于退格按钮6.特殊插件功能7.==例如==:三、GIF演示四、附完整代码摘要:手把...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作