使用python的tkinter制作简单计算器

计算器只有加、减、乘、除、取反
代码中有详细注释
将计算器封装成了一个类

效果图:
在这里插入图片描述

import tkinter as tk

class App:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('小小计算器')
        # 指定窗口大小和默认所处位置
        self.root.geometry("295x280+150+150")
        self.root['background'] = '#ffffff'

        # 存放按键输入的元素
        self.mylist = []
        # 在界面中要显示的内容
        self.result_num = tk.StringVar()
        self.result_num.set(0)
        self.layout()

        self.root.mainloop()


    def put(self,x):
        '''点击数字后,将按键输入的内容保存在列表 mylist 中,使用join拼接为字符串显示出来'''
        self.mylist.append(x)
        self.result_num.set(''.join(self.mylist))


    def delete(self):
        '''清空按钮功能'''
        self.mylist.clear()
        self.result_num.set(0)


    def back(self):
        '''删除按钮功能,删除一个数字或运算符'''
        if len(self.mylist) > 0:
            del self.mylist[-1]
            self.result_num.set(self.mylist)


    def calculation(self):
        '''运算按钮'''
        expression = ''.join(self.mylist)
        result = eval(expression)
        self.result_num.set(result)
        # 计算出结果后清空数据列表,仅存储当前计算结果
        self.mylist.clear()
        # join将列表中的元素拼接为字符串,列表元素必须全为str型
        self.mylist.append(str(result))


    def operate(self,operator):
        '''
        点击运算操作符后判断前一个按键是否为操作符
        若前一个按键为操作符,则修改上一个操作符为当前操作符
        否则将当前操作符加入显示列表
        '''

        if len(self.mylist) > 0:
            if self.mylist[-1] in ['+', '-', '*', '/','.']:
                self.mylist[-1] = operator
            else:
                self.mylist.append(operator)

            self.result_num.set(''.join(self.mylist))


    def inverse(self):
        '''若前一个按键是一个数字,则将这个数字转换为负数'''
        if len(self.mylist) > 0 and self.mylist[-1] not in ['+', '-', '*', '/','.']:
            self.mylist[-1] = str(-int(self.mylist[-1]))
            self.result_num.set(''.join(self.mylist))

    def layout(self):
        # 网格的第一行为显示面板
        # 显示按键输入内容与运算结果的面板
        label = tk.Label(self.root, textvariable=self.result_num, width=20, height=2,
                        justify='left', anchor='se', bg='#ffffff', font=('宋体', 20))
        label.grid(row=0, column=0, padx=4, pady=4, columnspan=4)


        # 第二行开始为运算符
        button_clear = tk.Button(self.root, text='C', width=5, font=(
            '宋体', 16), bg='#C0C0C0', command=self.delete)
        button_clear.grid(row=1, column=0, padx=4, pady=4)
        # 删除键
        button_back = tk.Button(self.root, text='←', width=5, font=(
            '宋体', 16), bg='#C0C0C0', command=self.back)
        button_back.grid(row=1, column=1, padx=4, pady=4)
        # 除法
        button_div = tk.Button(self.root, text='/', width=5, font=('宋体', 16),
                            bg='#C0C0C0', command=lambda: self.operate('/'))
        button_div.grid(row=1, column=2, padx=4, pady=4)
        # 乘法
        button_mult = tk.Button(self.root, text='*', width=5, font=('宋体', 16),
                                bg='#C0C0C0', command=lambda: self.operate('*'))
        button_mult.grid(row=1, column=3, padx=4, pady=4)

        # 第三行开始为数字

        # 第三行
        button_seven = tk.Button(self.root,text=7, width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('7'))
        button_seven.grid(row=2, column=0, padx=4)

        button_eight = tk.Button(self.root,text=8, width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('8'))
        button_eight.grid(row=2, column=1, padx=4)

        button_nine = tk.Button(self.root,text=9, width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('9'))
        button_nine.grid(row=2, column=2, padx=4)

        button_sub = tk.Button(self.root, text='-', width=5, font=('宋体', 16),
                            bg='#C0C0C0', command=lambda: self.operate('-'))
        button_sub.grid(row=2, column=3, padx=4, pady=4)

        # 第四行
        button_four = tk.Button(self.root,text=4, width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('4'))
        button_four.grid(row=3, column=0, padx=4)

        button_five = tk.Button(self.root,text=5, width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('5'))
        button_five.grid(row=3, column=1, padx=4)

        button_six = tk.Button(self.root,text=6, width=5, font=('宋体', 16),
                            bg='#FFDEAD', command=lambda: self.put('6'))
        button_six.grid(row=3, column=2, padx=4)

        button_add = tk.Button(self.root, text='+', width=5, font=('宋体', 16),
                            bg='#C0C0C0', command=lambda: self.operate('+'))
        button_add.grid(row=3, column=3, padx=4, pady=4)

        # 第五行
        button_one = tk.Button(self.root, text=1, width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('1'))
        button_one.grid(row=4, column=0, padx=4)

        button_two = tk.Button(self.root, text=2, width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('2'))
        button_two.grid(row=4, column=1, padx=4)

        button_three = tk.Button(self.root, text=3, width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('3'))
        button_three.grid(row=4, column=2, padx=4)

        button_equal = tk.Button(self.root, text='=', width=5, height=3, font=(
            '宋体', 16), bg='#C0C0C0', command=self.calculation)
        button_equal.grid(row=4, column=3, padx=4, rowspan=5)

        # 第六行
        # 取反,用来表示相反数和负数
        button_not = tk.Button(self.root, text='+/-', width=5,
                            font=('宋体', 16), bg='#FFDEAD', command=self.inverse)
        button_not.grid(row=5, column=0, padx=4)

        button_zero = tk.Button(self.root, text=0, width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('0'))
        button_zero.grid(row=5, column=1, padx=4)

        # 小数点
        button_pot = tk.Button(self.root, text='.', width=5, font=(
            '宋体', 16), bg='#FFDEAD', command=lambda: self.put('.'))
        button_pot.grid(row=5, column=2, padx=4, pady=4)



app = App()
  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Python Tkinter 计算器的代码示例: ``` python import tkinter as tk class Calculator: def __init__(self, master): self.master = master master.title("计算器") self.display = tk.Entry(master, width=30, font=('Arial', 16)) self.display.grid(row=0, column=0, columnspan=4, padx=10, pady=10) button_list = [ "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+" ] row = 1 col = 0 for button_text in button_list: button = tk.Button(master, text=button_text, width=5, height=2, font=('Arial', 16), command=lambda x=button_text: self.button_click(x)) button.grid(row=row, column=col, padx=5, pady=5) col += 1 if col > 3: col = 0 row += 1 def button_click(self, text): if text == "=": result = eval(self.display.get()) self.display.delete(0, tk.END) self.display.insert(0, result) elif text == "C": self.display.delete(0, tk.END) else: self.display.insert(tk.END, text) root = tk.Tk() app = Calculator(root) root.mainloop() ``` 在这个计算器中,我们使用Tkinter 中的 Entry 和 Button 组件。Entry 组件用于显示计算结果,而 Button 组件则用于用户输入数字和运算符。 在构造函数 `__init__` 中,我们首先创建了一个 Entry 组件,并将其放置在第一行第一列,并占据 4 列。接着,我们创建了一个按钮列表,其中包含了计算器的所有功能键。然后,我们使用 for 循环来将这些按钮放置在计算器的界面中。 在 `button_click` 函数中,我们根据用户输入的按钮内容进行相应的处理。如果是 "=" 按钮,则获取 Entry 中的内容并计算结果,然后将结果显示在 Entry 中。如果是 "C" 按钮,则清空 Entry 的内容。否则,将按钮内容添到 Entry 的末尾。最后,我们创建了一个 Tkinter 窗口,并将其传递给 Calculator 类的实例以启动计算器。 这个计算器还比较简单,但是基本的功能已经实现了。如果你想要添其他功能,可以在按钮列表中添相应的按钮,并在 `button_click` 函数中进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值