Content
- 案例介绍
- 准备工作
- 界面模块
- 代码汇总
- 运行截图
- 后记
案例介绍
书接上回,这次我们将完善清空键、退格键、括号以及菜单按钮——包括了百分号,数学计算所需要的符号。
我们将要学习:1.无标题小菜单的制作。2.生成/消除子标题框的方法。3.退格键功能的编写。
准备工作
- Python 3.x
界面模块
将界面扩充为两个部分:扩充之前的主菜单,功能菜单。

【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()- 括号功能。核心代码:
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    :  
@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()运行截图



后记
以上就是关于如何使用 tkinter 制作一个简易计算器(version 2)的全部内容,接下来,我们会加入数学计算的功能。

                
                










