自己做了一个计算器
语言:Python3
主要模块:Tkinter
正负号禁用,因为不会写了。
制作思路:上面就是一个单文本框,点击按键还是键盘输入都是在文本框中显示,最后 = 的时候用 eval 计算文本框中的字符串,结果再放回到文本框中去。MC、 M+ 、M- 、MR 可用。对文本框中的字符串没有校验,输入错误时无提示,计算无反应,因为后台己经出错了。
# coding=utf-8
from tkinter import *
from tkinter import messagebox
from random import choice
import math
class Application(Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.createWidget()
self.pack()
# 调用添加小部件,给GUI添加小部件
def createWidget(self):
# 需要添加的小部件
global result, stre, mm, v1, arr, arrcommand
mm = IntVar()
mm.set(0)
v1 = StringVar()
v1.set("")
stre = StringVar()
stre.set("")
arr = [["(",")","±","/","*"],["7","8","9","-"],["4","5","6","+"],["1","2","3"],["0","."]]
arrcommand=[[],[],[],[],[]]
self.ent01 = Entry(self, textvariable=v1)
self.ent01.grid(row=0, column=0, columnspan=4)
self.btn01 = Button(self, text="MC", command=self.mc, width=4)
self.btn01.grid(row=1, column=0)
self.btn02 = Button(self, text="M+", command=self.mplus, width=4)
self.btn02.grid(row=1, column=1)
self.btn03 = Button(self, text="M-", command=self.mminus, width=4)
self.btn03.grid(row=1, column=2)
self.btn04 = Button(self, text="MR", command=self.mr, width=4)
self.btn04.grid(row=1, column=3)
self.btn05 = Button(self, text="C", command=self.clear, width=4)
self.btn05.grid(row=1, column=4)
for i in range(5):
n = 0
for j in arr[i]:
arrcommand[i].append(Button(self, text=arr[i][n]))
arrcommand[i][n].grid(row=i+2, column=n if j != "." else n + 1, columnspan=2 if (i!=0 and n==3) or j == "0" else 1, sticky=NSEW)
if j != "±":
arrcommand[i][n]["command"] = lambda m=arrcommand[i][n]["text"]: v1.set(v1.get() + m)
else:
arrcommand[i][n]["command"] = lambda m=arrcommand[i][n]["text"]: v1.set(v1.get() + m)
arrcommand[i][n].config(state="disabled")
n += 1
self.btncalculation = Button(self, text="=", command=self.calculationNum)
self.btncalculation.grid(row=5, column=3, rowspan=2, columnspan=2, sticky=NSEW)
def calculationNum(self):
if v1.get() != "":
v1.set(str(eval(v1.get())))
def mc(self):
mm.set(0)
def mr(self):
v1.set(v1.get() + str(mm.get()))
def mplus(self):
mm.set(mm.get() + eval(v1.get()))
v1.set("")
def mminus(self):
mm.set(mm.get() - eval(v1.get()))
v1.set("")
def clear(self):
v1.set("")
if __name__ == "__main__":
root = Tk()
root.geometry("200x300+300+100")
root.title("自制计算器")
app = Application(master=root)
root.mainloop()