当前位置 : 主页 > 编程语言 > java >

【案例】用 tkinter 做一个计算器吧?(版本三)

来源:互联网 收集:自由互联 发布时间:2022-06-23
Content ​​案例介绍​​ ​​准备工作​​ ​​界面模块​​ ​​代码汇总​​ ​​运行截图​​ ​​后记​​ 案例介绍 这将是我们小项目的最终版(或许吧),这次我们加入数学


Content

  • ​​案例介绍​​
  • ​​准备工作​​
  • ​​界面模块​​
  • ​​代码汇总​​
  • ​​运行截图​​
  • ​​后记​​

案例介绍

这将是我们小项目的最终版(或许吧),这次我们加入数学计算功能。

pi、e、sin()、cos()、tan()、

n!、log()、gcd()、幂运算、平方根

我们将要学习:1. 阶乘运算如何实现。2. 怎么求两个数的最大公约数。

准备工作

  • Python 3.x
  • 最大公约数:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。

界面模块

界面分为了主界面和菜单界面,二者通过 menu 按钮相互联系,菜单界面主要提供了数学计算所需要的内容,按下 cancel 则可以退出菜单。

【案例】用 tkinter 做一个计算器吧?(版本三)_输入框

【key points】

  • n!:功能的实现。调用 python math 模块中的 factorial() 方法。
  • >>> from math import factorial
    >>> factorial(5)
    120
  • ^ 功能的实现。使用 python 内置方法 pow()。
  • >>> pow(2, 3)
    8
  • gcd 功能的实现。使用 python math 模块中的 gcd 模块。
  • >>> from math import gcd
    >>> gcd(3, 6)
    3
  • 平方根功能的实现。使用 python math 模块中的 sqrt 模块。
  • >>> from math import sqrt
    >>> sqrt(4)
    2.0

    代码汇总

    # coding: utf-8
    # !/usr/bin/python
    """
    @File : 计算器.py
    @Author : jiaming
    @Modify Time: 2020/4/26 21:27
    @Contact :
    @Version : 3.0
    @Desciption : 1. 没有数学计算,百分号 done!
    2. 光标尾置 done!
    3. 回退键只能回退最后一个字符 done!
    """
    # log(10,2)
    from math import sin, cos, pi, e, tan, gcd, log, sqrt, factorial
    import tkinter as tk

    # 文本框中内容
    TEXT_str = ''


    def get_value():
    """
    求值
    :return:
    """
    try:
    print('所求表达式:', TEXT_str)
    value = str(eval(TEXT_str))
    return value
    except BaseException:
    print('出错!')
    return ''


    def menu(Entry_word=None):
    """
    菜单
    :return:
    """
    menu = tk.Tk()
    menu.title("菜单")
    menu.geometry('320x145+590+308')
    menu.overrideredirect(True)
    menu_list = [
    'pi', 'e', 'sin()', 'cos()',
    'tan()', 'n!', 'log(,)', 'gcd(,)',
    '^', 'sqrt()', '%', 'cancel',
    ]

    def btn_command_menu(idx):
    """
    菜单界面
    :param idx:
    :return:
    """
    global TEXT_str
    s = menu_list[idx]
    print("输入:", s)
    if s == "n!":
    Entry_word.insert(tk.INSERT, "factorial()")
    TEXT_str = Entry_word.get()
    elif s == "^":
    Entry_word.insert(tk.INSERT, "pow(,)")
    TEXT_str = Entry_word.get()
    elif s == "%":
    Entry_word.insert(tk.INSERT, "*0.01")
    TEXT_str = Entry_word.get()
    elif s == "cancel":
    pass
    else:
    Entry_word.insert(tk.INSERT, s)
    TEXT_str = Entry_word.get()
    menu.destroy()

    # 放置按钮
    key = 0
    for i in range(0, 3):
    for j in range(0, 4):
    if menu_list[key] == "cancel":
    btn = tk.Button(
    menu,
    text=menu_list[key],
    width=10,
    height=2,
    relief=tk.GROOVE,
    command=lambda idx=key: btn_command_menu(idx),
    bg="orange"
    )

    else:
    btn = tk.Button(
    menu,
    text=menu_list[key],
    width=10,
    height=2,
    relief=tk.GROOVE,
    command=lambda idx=key: btn_command_menu(idx))
    btn.grid(row=i, column=j)
    key += 1

    menu.mainloop()


    def main():
    """
    绘制计算器界面
    """
    # 界面对象的基本参数设置
    root = tk.Tk()
    root.title("计算器(Version3)")
    root.geometry('335x265+250+250')
    # 设置界面是否可以随意拉伸
    root.resizable(False, False)

    text_list = [
    'AC', 'BS', '( )', 'menu',
    '7', '8', '9', '+',
    '4', '5', '6', '-',
    '1', '2', '3', '*',
    '.', '0', '=', '/',
    ]

    # 放置文本框
    Entry_word = tk.Entry(root, width=30, font=('Arial', 15))
    Entry_word.grid(row=0, column=0, columnspan=4)

    def btn_command(idx=None):
    """
    按钮事件
    :param idx:
    :return:
    """
    global TEXT_str
    # 打印按钮的 text 值
    s = text_list[idx]
    print("输入:", s)
    if s == '=':
    # 按下等号,调用求值函数
    value_str = get_value()
    TEXT_str = '' # 所求的表达式
    Entry_word.delete(0, tk.END) # 清空输入框所有内容
    Entry_word.insert(tk.END, value_str) # 向输入框中插入求得的值 value_str
    elif s == 'menu':
    # 菜单键
    menu(Entry_word=Entry_word) # 调用菜单界面
    elif s == 'AC':
    TEXT_str = '' # 所求的表达式
    Entry_word.delete(0, tk.END) # 清空输入框所有内容
    elif s == 'BS':
    # print(Entry_word.index(tk.INSERT))
    Entry_word.delete(Entry_word.index(tk.INSERT) - 1,
    Entry_word.index(tk.INSERT))
    TEXT_str = Entry_word.get()
    elif s == '( )':
    Entry_word.insert(tk.INSERT, '()')
    TEXT_str = Entry_word.get()
    else:
    # 其它
    Entry_word.insert(tk.INSERT, s)
    TEXT_str = Entry_word.get()

    # 放置按钮
    key = 0
    for i in range(1, 6):
    for j in range(0, 4):
    if text_list[key] == "=":
    btn = tk.Button(
    root,
    text=text_list[key],
    width=10,
    height=2,
    relief=tk.GROOVE,
    command=lambda idx=key: btn_command(idx),
    bg="orange"
    )
    elif text_list[key] == "menu":
    btn = tk.Button(
    root,
    text=text_list[key],
    width=10,
    height=2,
    relief=tk.GROOVE,
    command=lambda idx=key: btn_command(idx),
    bg="gray"
    )
    else:
    btn = tk.Button(
    root,
    text=text_list[key],
    width=10,
    height=2,
    relief=tk.GROOVE,
    command=lambda idx=key: btn_command(idx))
    btn.grid(row=i, column=j)
    key += 1

    root.mainloop()


    if __name__ == "__main__":
    main()

    运行截图

    【案例】用 tkinter 做一个计算器吧?(版本三)_最大公约数_02
    【案例】用 tkinter 做一个计算器吧?(版本三)_python_03
    【案例】用 tkinter 做一个计算器吧?(版本三)_输入框_04
    【案例】用 tkinter 做一个计算器吧?(版本三)_python_05
    【案例】用 tkinter 做一个计算器吧?(版本三)_开发语言_06
    【案例】用 tkinter 做一个计算器吧?(版本三)_开发语言_07
    【案例】用 tkinter 做一个计算器吧?(版本三)_python_08
    【案例】用 tkinter 做一个计算器吧?(版本三)_最大公约数_09

    【案例】用 tkinter 做一个计算器吧?(版本三)_开发语言_10
    【案例】用 tkinter 做一个计算器吧?(版本三)_开发语言_11

    【案例】用 tkinter 做一个计算器吧?(版本三)_开发语言_12
    【案例】用 tkinter 做一个计算器吧?(版本三)_python_13

    后记

    以上就是关于如何使用 tkinter 制作一个简易计算器(version 3)的全部内容了。

    【案例】用 tkinter 做一个计算器吧?(版本三)_开发语言_14


    网友评论