0
点赞
收藏
分享

微信扫一扫

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


Content

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

案例介绍

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

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

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

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

准备工作

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

界面模块

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

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

【key points】

  1. n!:功能的实现。调用 python math 模块中的 factorial() 方法。
>>> from math import factorial
>>> factorial(5)
120
  1. ^ 功能的实现。使用 python 内置方法 pow()。
>>> pow(2, 3)
8
  1. gcd 功能的实现。使用 python math 模块中的 gcd 模块。
>>> from math import gcd
>>> gcd(3, 6)
3
  1. 平方根功能的实现。使用 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 做一个计算器吧?(版本三)_python_04
【案例】用 tkinter 做一个计算器吧?(版本三)_python_05
【案例】用 tkinter 做一个计算器吧?(版本三)_python_06
【案例】用 tkinter 做一个计算器吧?(版本三)_最大公约数_07
【案例】用 tkinter 做一个计算器吧?(版本三)_最大公约数_08
【案例】用 tkinter 做一个计算器吧?(版本三)_开发语言_09

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

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

后记

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

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


举报

相关推荐

0 条评论