python tkinter实现简单计算器

功能分析

基础功能

  • 需要有显示区,可以使用label,text,entry
  • 显示按键0-9以及运算符
  • 鼠标点击按键时,按键的值或者运算结果能够在显示区显示
  • 能够清空显示区以备下一次运算输入

功能完善和增强

  • 如果使用能获取输入的显示区,需要对异常输入进行识别(如字母)
  • 界面能够缩放(最小化,最大化)

代码实现

from tkinter import *



class Calculator(Frame):
     def __init__(self):
        Frame.__init__(self)
        self.pack(expand=YES, fill=BOTH)
        self.master.title('calculator')
        self.master.rowconfigure( 0, weight = 1 )
        self.master.columnconfigure( 0, weight = 1 )
        self.grid( sticky = W+E+N+S )

        display = StringVar()

        #add entry ,use grid method
        #textvariable must use 'display' instead of 'StrinvVar()', or click button shows nothing in Entry
        entry = Entry(self, relief=SUNKEN, textvariable=display)
        #W+E+N+S means that the widget should be expanded in both directions. Default is to center the widget in the cell.
        entry.grid(row=0, column=0, columnspan=4, sticky=W+E+N+S)

        #add button, use grid method
        grid = '789+456-123*0./='
        for index,textChar in enumerate(grid):
            a = Button(self, text=textChar, width=5, command=lambda text=textChar:display.set(display.get() + text))
            a.grid(row=1+index//4, column=index%4)
            button_text = a.cget("text")
            #print(button_text)
            if button_text == '=':
                a.config(command=lambda:display.set(eval(display.get())))

        #add clear button
        b = Button(self, text="clear", width=20, command=lambda:display.set(""))
        b.grid(row=7, column=0, columnspan=4, sticky=W+E+N+S)



if __name__ == '__main__':
    Calculator().mainloop()

实现结果

  1. 界面显示
    python tkinter实现简单计算器_第1张图片
  2. 加减乘除运算正常,clear功能正常
    python tkinter实现简单计算器_第2张图片
    python tkinter实现简单计算器_第3张图片

尚未实现

  1. 除法除数为0的异常处理
  2. 非数字输入的异常处理
  3. 按钮大小固定,需改为pack方式以满足缩放需求

参考资料

grid layout
change widget text
get widget text
get widget setting
entry widget
grid geometry
python gui模块

你可能感兴趣的:(python)