![e1885a13762a84e59a4f644714110d56.png](https://i-blog.csdnimg.cn/blog_migrate/c16ed64b7cafae438f17476283bffa18.jpeg)
案例介绍
书接上回,这次我们加入清空键、退格键、括号以及菜单按钮——包括了百分号,数学计算所需要的符号。
我们将要学习:1.无标题小菜单的制作。2.生成/消除子标题框的方法。3.退格键功能的编写。
准备工作
- Python 3.x
界面模块
将界面扩充为两个部分:扩充之前的主菜单+功能菜单。
![c9a68b32d14549953c38eccc7d7c01be.png](https://i-blog.csdnimg.cn/blog_migrate/c304f6a4bc8e2b1ff32cf555852d12ce.png)
【key points】
- 无标题小菜单(功能菜单)的制作。核心代码:
root.overrideredirect(True)
,其功能是消除标题栏,边框。需要注意的是,我为每个按钮事件中都添加了root.destroy()
代码,使得每按下一个按钮就可以关闭功能菜单。 - 退格键功能。要义是:删除光标前的一个字符,再重新获取 entry 中的内容作为计算表达式,核心代码:
Entry_word.delete(Entry_word.index(tk.INSERT) - 1, Entry_word.index(tk.INSERT))
TEXT_str = Entry_word.get()
3. 括号功能。核心代码:
Entry_word.insert(tk.INSERT, '()')
TEXT_str = Entry_word.get()
代码汇总
# coding: utf-8
# !/usr/bin/python
"""
@File : 计算器.py
@Author : jiaming
@Modify Time: 2020/4/26 21:27
@Contact : https://jiaming.blog.csdn.net/
@Version : 2.0
@Desciption : 1. 没有数学计算,百分号
2. 光标尾置 done!
3. 回退键只能回退最后一个字符 done!
"""
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():
"""
菜单
:return:
"""
menu = tk.Tk()
menu.title("菜单")
menu.geometry('320x145+590+308')
menu.overrideredirect(True)
menu_list = [
'pi', 'e', 'sin', 'cos',
'tan', 'n!', 'log', 'ln',
'^', 'sqrt', '%', '',
]
def btn_command_menu(idx):
"""
菜单界面
:param idx:
:return:
"""
s = menu_list[idx]
print("输入:", s)
menu.destroy()
# 放置按钮
key = 0
for i in range(0, 3):
for j in range(0, 4):
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("计算器(Version2)")
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() # 调用菜单界面
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):
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()
运行截图
![c92f5cc5fd734ccbe307aa740082d172.png](https://i-blog.csdnimg.cn/blog_migrate/e943f91c8a99dbdfd009ea3c6dfb44b2.png)
![c164539a2cf5c2558549d67255844a56.png](https://i-blog.csdnimg.cn/blog_migrate/a6e654dcd3efc0acd9dd0ef80adacdc2.png)
![20da7a2d9b6e73b0346694e65f9df12a.png](https://i-blog.csdnimg.cn/blog_migrate/635719c65943fb2077198c63e5125c3f.png)
后记
以上就是关于如何使用 tkinter 制作一个简易计算器(version 2)的全部内容,接下来,我们会加入数学计算的功能。
![92638ab5e86ffa8852e3f361567be39b.gif](https://i-blog.csdnimg.cn/blog_migrate/42d15f1f8972c656dff10f0f02833a8a.gif)
欢迎关注我的 CSDN 博客,里面有更多关于 python 的精彩知识分享哦~
CSDN-专业IT技术社区-登录jiaming.blog.csdn.net