今天和大家分享一个做计算器的小案例。主要用到的是tkinter库做界面,使用grid布局,使用类创建对象。
设计思路
在设计计算器程序时,我们需要考虑以下几个方面:
1. 界面设计:计算器需要一个简单的用户界面,用户可以通过该界面输入数字和运算符。
2. 数据类型:我们需要定义一些变量和数据类型来存储用户输入的数字和运算符,以及计算结果。
3. 运算逻辑:计算器需要根据用户输入的运算符来进行相应的数学运算,并输出计算结果。
在本文中,我们将采用Python语言实现一个基本的计算器,该计算器具有以下功能:
1. 支持加、减、乘、除四种基本运算。
2. 支持小数的运算。
3. 支持多次连续计算。
计算器实现代码
1.导入库
import tkinter as tk
2.创建计算器窗体类并初始化
class Calc(tk.Tk):
"""计算器窗体类"""
def __init__(self):
"""初始化实例"""
tk.Tk.__init__(self)
self.title("计算器")
self.memory = 0 # 暂存数值
self.create()
3.定义create()方法创建和排版计算器界面,使用列表存储界面符号,使用for循环结合grid()绑定符号和click点击函数。
def create(self):
"""创建界面"""
btn_list = ["C", "M->", "->M", "/",
"7", "8", "9", "*",
"4", "5", "6", "-",
"1", "2", "3", "+",
"+/-", "0", ".", "="]
r = 1
c = 0
for b in btn_list:
self.button = tk.Button(self, text=b, width=5,
command=(lambda x=b: self.click(x)))
self.button.grid(row=r, column=c, padx=3, pady=6)
c += 1
if c > 3:
c = 0
r += 1
self.entry = tk.Entry(self, width=24, borderwidth=2,
bg="yellow", font=("Consolas", 12))
self.entry.grid(row=0, column=0, columnspan=4, padx=8, pady=6)
4.定义带参点击方法click(),通过参数匹配实现功能选择。
#点击事件
def click(self, key):
"""响应按钮"""
if key == "=": # 输出结果
result = eval(self.entry.get())
self.entry.insert(tk.END, " = " + str(result))
elif key == "C": # 清空输入框
self.entry.delete(0, tk.END)
elif key == "->M": # 存入数值
self.memory = self.entry.get()
if "=" in self.memory:
ix = self.memory.find("=")
self.memory = self.memory[ix + 2:]
self.title("M=" + self.memory)
elif key == "M->": # 取出数值
if self.memory:
self.entry.insert(tk.END, self.memory)
elif key == "+/-": # 正负翻转
if "=" in self.entry.get():
self.entry.delete(0, tk.END)
elif self.entry.get()[0] == "-":
self.entry.delete(0)
else:
self.entry.insert(0, "-")
else: # 其他键
if "=" in self.entry.get():
self.entry.delete(0, tk.END)
self.entry.insert(tk.END, key)
5.调用Calc()类实例化,并保持界面。
if __name__ == "__main__":
Calc().mainloop()
完整代码:
import tkinter as tk
class Calc(tk.Tk):
"""计算器窗体类"""
def __init__(self):
"""初始化实例"""
tk.Tk.__init__(self)
self.title("计算器")
self.memory = 0 # 暂存数值
self.create()
def create(self):
"""创建界面"""
btn_list = ["C", "M->", "->M", "/",
"7", "8", "9", "*",
"4", "5", "6", "-",
"1", "2", "3", "+",
"+/-", "0", ".", "="]
r = 1
c = 0
for b in btn_list:
self.button = tk.Button(self, text=b, width=5,
command=(lambda x=b: self.click(x)))
self.button.grid(row=r, column=c, padx=3, pady=6)
c += 1
if c > 3:
c = 0
r += 1
self.entry = tk.Entry(self, width=24, borderwidth=2,
bg="yellow", font=("Consolas", 12))
self.entry.grid(row=0, column=0, columnspan=4, padx=8, pady=6)
#点击
def click(self, key):
"""响应按钮"""
if key == "=": # 输出结果
result = eval(self.entry.get())
self.entry.insert(tk.END, " = " + str(result))
elif key == "C": # 清空输入框
self.entry.delete(0, tk.END)
elif key == "->M": # 存入数值
self.memory = self.entry.get()
if "=" in self.memory:
ix = self.memory.find("=")
self.memory = self.memory[ix + 2:]
self.title("M=" + self.memory)
elif key == "M->": # 取出数值
if self.memory:
self.entry.insert(tk.END, self.memory)
elif key == "+/-": # 正负翻转
if "=" in self.entry.get():
self.entry.delete(0, tk.END)
elif self.entry.get()[0] == "-":
self.entry.delete(0)
else:
self.entry.insert(0, "-")
else: # 其他键
if "=" in self.entry.get():
self.entry.delete(0, tk.END)
self.entry.insert(tk.END, key)
if __name__ == "__main__":
Calc().mainloop()
效果图:
拓展:大家可以试试美化界面和增加更多的功能,比如乘方和开方。