制作的结果:用自己制作的两种计算器
一:第一种计算器
1:可以任意给计算器起名字,制作一个255x455一个画板。
from tkinter import *
win = Tk(className='计算器')
win.geometry("255x455") # 定义一个255x455的画布
2:定义数字输入,加减乘除。
def numInput(number): # 定义数字输入
first_num = en.get()
en.delete(0, END)
en.insert(0, str(first_num)+str(number))
def clear(): # 定义清除
en.delete(0, END)
def plus(): # 定义加法
global operator
global first_num
first_num = en.get()
en.delete(0, END)
operator = "addition"
def minus(): # 定义减法
global operator
global first_num
first_num = en.get()
en.delete(0, END)
operator = "subtraction"
def times(): # 定义乘法
global operator
global first_num
first_num = en.get()
en.delete(0, END)
operator = "multiplication"
def divide(): # 定义乘法
global operator
global first_num
first_num = en.get()
en.delete(0, END)
operator = "division"
def equal(): # 定义等号
second_num = en.get()
en.delete(0, END)
if operator == "addition":
en.insert(0, int(first_num) + int(second_num))
if operator == "subtraction":
en.insert(0, int(first_num) - int(second_num))
if operator == "multiplication":
en.insert(0, int(first_num) * int(second_num))
if operator == "division":
en.insert(0, int(first_num) / int(second_num))
print(first_num, operator, second_num)
3.定义画布上的所有按键
bu7 = Button(win, text=7, width=2, font=("Arial", 31), command=lambda: numInput(7))
bu8 = Button(win, text=8, width=2, font=("Arial", 31), command=lambda: numInput(8))
bu9 = Button(win, text=9, width=2, font=("Arial", 31), command=lambda: numInput(9))
bu4 = Button(win, text=4, width=2, font=("Arial", 31), command=lambda: numInput(4))
bu5 = Button(win, text=5, width=2, font=("Arial", 31), command=lambda: numInput(5))
bu6 = Button(win, text=6, width=2, font=("Arial", 31), command=lambda: numInput(6))
bu1 = Button(win, text=1, width=2, font=("Arial", 31), command=lambda: numInput(1))
bu2 = Button(win, text=2, width=2, font=("Arial", 31), command=lambda: numInput(2))
bu3 = Button(win, text=3, width=2, font=("Arial", 31), command=lambda: numInput(3))
bu0 = Button(win, text=0, width=2, font=("Arial", 31), command=lambda: numInput(0))
bu_eq = Button(win, text="=", width=2, font=("Arial", 31), command=equal)
bu_clear = Button(win, text="C", width=2, font=("Arial", 31), command=clear)
bu_add = Button(win, text="+", width=2, font=("Arial", 31), command=plus)
bu_min = Button(win, text="-", width=2, font=("Arial", 31), command=minus)
bu_times = Button(win, text="*", width=2, font=("Arial", 31), command=times)
bu_div = Button(win, text="/", width=2, font=("Arial", 31), command=divide)
4:布置所有按键和输入框的位置
bu7.place(x=10, y=100)
bu8.place(x=70, y=100)
bu9.place(x=130, y=100)
bu4.place(x=10, y=185)
bu5.place(x=70, y=185)
bu6.place(x=130, y=185)
bu1.place(x=10, y=270)
bu2.place(x=70, y=270)
bu3.place(x=130, y=270)
bu0.place(x=10, y=355)
bu_eq.place(x=70, y=355)
bu_clear.place(x=130, y=355)
bu_add.place(x=190, y=100)
bu_min.place(x=190, y=185)
bu_times.place(x=190, y=270)
bu_div.place(x=190, y=355)
en = Entry(win, width=10, font=("Arial", 25))
en.place(x=10, y=50)
5:进入主程序,运行
mainloop()
运行上面的所有程序就可以看到一个计算器界面出现了,下面开始打包成应用程序。
6:安装 pyinstaller制作成一个应用程序
pip install pyinstaller -i https://pypi.doubanio.com/simple
7:桌面上新建一个文件,用来保存计算器运行程序。打开Prompt,
输入 cd+文件夹路径
pyinstaller -F -w +程序路径
运行后,打开新建的文件,在dist文件夹里的就是运行程序,可以拖到桌面,以后就可以用自己的计算器了。
二:第二种计算器
import tkinter as tk
class Calculate(tk.Frame):
def __init__(self, parent = None):
"""构造函数"""
tk.Frame.__init__(self, parent)
self.pack()
self.startOfNextOperand = True # 开始输入下一个操作数
# 显示运算表达式
self.expr = tk.StringVar()
self.expr.set('')
self.exprLabel = tk.Label(self, font = ('Helvetica', 20),
fg = '#f40', width = 42, anchor='w', textvariable = self.expr)
self.exprLabel.grid(row = 0, column = 0, columnspan = 4)
# 显示结果
self.result = tk.StringVar()
self.result.set(0)
self.resultLabel = tk.Label(self, font = ('Helvetica', 20),
width = 42, anchor='e', textvariable=self.result)
self.resultLabel.grid(row = 1, column = 0, columnspan = 4)
# 计算器按钮的按钮,使用二维列表表示
buttons = [[ 'CE', 'C', '←', '/'],
['7', '8', '9', '×'],
['4', '5', '6', '-'],
['1', '2', '3', '+'],
['±', '0', '.', '=']]
# 创建和布局3到7行各个按钮
for r in range(5):
for c in range(4):
# 定义事件处理函数cmd(),默认参数为按钮标签buttons[r][c]
def cmd(key = buttons[r][c]):
self.click(key)
if(r == 0 or c == 3):
button = tk.Button(self, text = buttons[r][c], bg = '#008c8c', fg = '#fff',
width=15, font = ('Helvetica', 15), command = cmd)
else:
button = tk.Button(self, text = buttons[r][c], bg = '#fff', fg = '#666',
width=15, font = ('Helvetica', 15), command = cmd)
button.grid(row = r+2, column = c)
def click(self, key):
"""事件处理"""
if key == '=': #按等号键时, 求值, 并显示结果
result = eval(self.expr.get() + self.result.get())
self.result.set(result)
self.expr.set('')
self.startOfNextOperand = True
elif key in '+-/×':
if key == '×': key = '*'
resultExpr = self.expr.get() + self.result.get() + key
self.expr.set(resultExpr)
self.result.set(0)
self.startOfNextOperand = True
elif key == 'C': # 全部清空, 回到初始状态
self.expr.set('')
self.result.set(0)
elif key == 'CE': # 清空当前输入
self.result.set(0)
elif key == '←':
oldnum = self.result.get()
if len(oldnum) == 1: # 只有一个字符
newnum = 0
else:
newnum = oldnum[:-1]
self.result.set(newnum)
elif key == '±': # 正负号,切换正负号
oldnum = self.result.get() # 获取原来的值
if oldnum[0] == '-':
newnum = oldnum[1:]
else:
newnum = '-' + oldnum
self.result.set(newnum)
else: # 按数字或者小数点键
if self.startOfNextOperand:
self.result.set(0)
self.startOfNextOperand = False
oldnum = self.result.get() # 获取原来的值
if oldnum == '0':
self.result.set(key)
else:
newnum = oldnum + key
self.result.set(newnum)
if __name__ == '__main__':
root = tk.Tk()
root.title('简易计算器')
calculate = Calculate(root)
root.mainloop()
制作应用程序用7,8步骤。