tkinter 实现的简易加减法计算器 GUI 程序(05-Python实验五-2 加减法计算器.py)

图片

 

图片

 

图片

 

图片

 

 

这是基于 tkinter 实现的简易加减法计算器 GUI 程序,面向对象实现。 功能:提供菜单栏 + 输入框 + 按钮,支持做加法、减法计算,也可以通过菜单执行运算、退出程序。

import tkinter   # 导入tkinter图形界面库

#开始定义“计算器”类
class Calculator :
    # 1. 构造函数,创建Calculator实例时自动执行,搭建整个界面
    def __init__(self):
        myWindow = tkinter.Tk( )   # 创建主窗口对象
        myWindow.geometry('240x100+400+400')    #窗口大小和启动时左上角坐标
        # 格式:宽x高+x坐标+y坐标;窗口宽240,高100,窗口左上角出现在屏幕(400,400)位置
        myWindow.title("加减法计算器")   # 设置窗口标题

        # ============ 创建菜单栏部分 ============
        # 增加菜单栏,绑定到窗体
        menubar = tkinter.Menu(myWindow)   # 创建顶级菜单栏对象
        myWindow.config ( menu = menubar )  # 将菜单栏配置绑定到主窗口

        # 增加第一个菜单项,下拉菜单不能移出窗口
        exitMenu = tkinter.Menu( menubar, tearoff=0 )
        # tearoff=0:关闭“撕下菜单”功能,下拉菜单不能脱离主窗口独立悬浮;tearoff=1可以拖拽分离菜单

        # 增加下拉菜单的按钮,指定快捷键为 Alt + F,第一个字母有下划线
        menubar.add_cascade( label="File(文件)", menu=exitMenu, underline=0 )
        # add_cascade:创建级联下拉菜单;underline=0:第0个字符F加下划线,Alt+F可以打开这个菜单

        # 在第一个级联菜单中,增加 1 个命令,指定快捷键为 Alt + Q
        exitMenu.add_command( label="退出(Quit)", command=myWindow.destroy, underline=3 )
        # add_command:菜单项;command=myWindow.destroy:点击就关闭销毁主窗口,退出程序
        # underline=3:字符串第3个字符Q增加下划线,Alt+Q触发

        # 增加第二个菜单项
        operationMenu = tkinter.Menu( menubar, tearoff=0 )
        menubar.add_cascade( label="运算", menu=operationMenu ) # 主菜单栏新增【运算】下拉菜单

        # 在第二个级联菜单中,增加 2 个命令
        operationMenu.add_command( label="加法", command=self.add )   # 菜单点加法,调用add方法
        operationMenu.add_separator( )           # 下拉菜单绘制一条分隔横线,区分菜单项
        operationMenu.add_command( label="减法",command=self.subtract ) #菜单点减法调用subtract

        # ============ 第一块Frame:输入输出文本框区域 ============
        # 输入模块的框架容器,放在窗体网格的第一行第一列,上下间隔10像素
        frame1 = tkinter.Frame( myWindow )  # Frame容器,用来盛放标签Label和输入框Entry
        frame1.grid ( row=1, column=1, pady=10 ) # grid网格布局:第1行第1列,上下外边距10px

        # 从左到右,依次放置文字标签和文本框,把私有变量绑定到文本框
        tkinter.Label( frame1, text="加数" ).pack ( side=tkinter.LEFT )
        # side=tkinter.LEFT:pack布局,组件从左向右横向排列

        self.v1 = tkinter.StringVar( value='0' )
        # StringVar:tkinter字符串变量,专门和Entry输入框双向绑定;初始默认值'0'
        tkinter.Entry( frame1, width=5, textvariable=self.v1, justify = tkinter.RIGHT ).pack ( side = tkinter.LEFT )
        # Entry单行输入框;textvariable绑定字符串变量;justify=RIGHT文本靠右对齐

        tkinter.Label( frame1, text="被加数" ).pack ( side=tkinter.LEFT )
        self.v2 = tkinter.StringVar( value='0' )
        tkinter.Entry( frame1, width=5, textvariable=self.v2, justify = tkinter.RIGHT ).pack ( side = tkinter.LEFT )

        tkinter.Label( frame1, text="结果:" ).pack ( side = tkinter.LEFT )
        self.v3 = tkinter.StringVar( value = '0' )
        tkinter.Entry( frame1, width=5, textvariable = self.v3, justify = tkinter.RIGHT ).pack ( side = tkinter.LEFT )

        # ============ 第二块Frame:功能按钮区域 ============
        # 输出模块的框架容器,放在窗体网格的第二行第一列,
        # sticky = tkinter.E 吸附在单元格东(右)边
        frame2 = tkinter.Frame( myWindow )
        frame2.grid( row = 2, column = 1, pady = 10, sticky = tkinter.E )

        # 创建两个按钮,点击分别调用加法、减法函数
        tkinter.Button( frame2, text = "加法", command = self.add ).pack ( side = tkinter.LEFT )
        tkinter.Button( frame2, text = "减法", command = self.subtract ).pack ( side = tkinter.LEFT )

        # 显示窗体,监听鼠标和键盘事件,开启GUI事件循环
        myWindow.mainloop( )

    # 2. 成员函数-加法
    def add( self ):
        # self.v1.get() 获取输入框1的字符串;eval()把字符串转为数值计算
        # 相加后,self.v3.set() 将计算结果写回到绑定v3的【结果输入框】
        self.v3.set ( eval ( self.v1.get( ) ) + eval ( self.v2.get( ) ) )

    # 3. 成员函数-减法
    def subtract( self ) :
        number1 = eval ( self.v1.get( ) )
        number2 = eval ( self.v2.get( ) )
        self.v3.set ( number1 - number2 )

#终止定义“计算器”类

#程序入口:只有直接运行本脚本,才实例化计算器;被别的文件import导入时不会自动启动窗口
if __name__ == '__main__':
    Calculator( )

🖥 运行效果

  1. 弹出窗口,标题:加减法计算器
  2. 窗口顶部菜单栏:File(文件)、运算
    • File (文件) → 退出 (Quit),点击关闭程序
    • 运算 → 加法 / 减法,点击菜单可以做计算
  3. 界面有 3 个输入框:加数、被加数、结果,默认全部显示 0
  4. 下方两个按钮:【加法】【减法】,点击按钮执行加减运算,结果显示在结果框

两种途径触发计算:菜单栏点击 或者 界面按钮点击,调用的是同一个函数。

📌核心知识点讲解

1. tkinter.Menu 菜单栏

  • add_cascade:创建下拉主菜单
  • add_command:下拉菜单里的可点击选项
  • add_separator():画分割线
  • tearoff=0:禁止菜单脱离窗口;underline=n 设置字符下划线,配合 Alt 快捷键
  • myWindow.destroy():销毁窗口,结束 GUI 程序。

2. StringVar 双向绑定(重点)

self.v1 = tkinter.StringVar(value='0')
tkinter.Entry(..., textvariable=self.v1)
  • get():读取输入框里面的文本字符串:self.v1.get()
  • set():往输入框写入内容:self.v3.set(结果)

Entry 输入框内容和 StringVar 变量绑定,修改变量就改变输入框,输入框输入内容也会改变变量。

3. eval() 函数

eval(字符串),把字符串当成 Python 表达式执行。 例如 eval("12") →得到数字 12。 ⚠风险:eval会执行任意代码,实际项目不推荐,教学示例使用。

4. 布局混用

  • grid():给 Frame 框架放在窗口上(按行、列摆放)
  • pack(side=tkinter.LEFT):在 Frame 内部,组件从左向右横向排列。
  • sticky=tkinter.E:East 东方向,把组件贴到网格单元格的右侧。

5. if __name__ == '__main__':

脚本直接运行,才创建计算器对象,弹出窗口;如果这个 py 文件被其他程序 import 导入,则不会自动弹出窗口。

⚠代码存在的小问题

  1. 如果输入框输入非数字,eval()会直接报错,程序崩溃,没有异常处理。
  2. eval()有安全风险,正规写法应该用float()转换,例如:
num1 = float(self.v1.get())
num2 = float(self.v2.get())

补充:按钮与菜单共用回调

按钮command=self.add,菜单command=self.add,两者调用同一个方法,所以点按钮和点菜单效果完全一样。注意command后面不要写括号。

 

posted @ 2026-10-19 21:50  emanlee  阅读(4)  评论(0)    收藏  举报