如何用Tkinter做一个计算器

from tkinter import *
'''
制作一个计算器,先打印3*3的数字按钮,再打印最右边的运算符号按钮,
最后打印底部的0和=,底部左侧是结果的文本框,用类记录每一个按钮代
表的含义。用一个全局变量,来检测是否是第一次输入数字,是的话存入
数字一,不是的话说明已经有数字一,则存入数字二,按=时输出数值的
同时,把结果存在数字一并且初始化数字二,以便于继续运算。
'''
# 计步器
cnt = 1
# 数量
quantity = 4
# 格子边长
wide = 1/quantity

# 创建一个窗口
root= Tk()
# 窗口名字
root.title('计算器')
# 窗口大小
root.geometry('300x300') # 这里的乘号不是 * ,而是小写英文字母 x

k=0

# 运算类
class operation():
    def main(self,value1,value2,operation_symbol):
        True
    def result(self):
        self.value1 = int(self.value1)
        self.value2 = int(self.value2)
        if self.operation_symbol =='+':
            return self.value1 + self.value2
        elif self.operation_symbol =='-':
            return self.value1 - self.value2
        elif self.operation_symbol =='*':
            return self.value1 * self.value2
        elif  self.operation_symbol =='÷':
            return self.value1 / self.value2

# 运算类定义 执行   
last_result = operation()
# 初始化为字符串
last_result.value1 = ''
last_result.value2 = ''


# 输入数字函数
def run2(cnt2):
    #声明全局变量k
    global k
    # 输入第一个数字
    if k==0:
        last_result.value1 = last_result.value1 + str(cnt2)
        lbl.config(text=str(last_result.value1))
    # 输入第二个数字
    if k!=0:
        last_result.value2 = last_result.value2 + str(cnt2)
        lbl.config(text=str(last_result.value2))

# 输入符号函数
def run3(cnt3):
        global k
        k+=1
        last_result.operation_symbol = cnt3
        
# 打印结果至文本框,并记录这一次结果便于直接继续计算
def run4():
        lbl.config(text=str(last_result.result()))
        # 把结果存回第一个数字
        last_result.value1 = last_result.result()
        # 初始化第二个数字
        last_result.value2 = ''
    
# 创建一个自己的数字按钮类    
class myButton():
    def __init__(self,root):
        # 用cnt存储按钮代表的数字
        self.cnt = 1
        self.j = 1
    def button(self):
        btn = Button(root, text='{}'.format(cnt),command = lambda:run2(self.cnt))
        btn.place(relx=j*wide, rely=i*wide, relwidth=wide, relheight=wide)

# 创建符号按钮类
class myButton2():
    def __init__(self,root):
        # 用j2存储符号位置
        self.j2 = 1
    def button(self):
        last_column = ['+','-','*','÷']
        btn = Button(root, text='{}'.format(last_column[self.j2]),command = lambda:run3(last_column[self.j2]))
        btn.place(relx=3*wide, rely=self.j2*wide, relwidth=wide, relheight=wide)


# 先创建一个九宫格
for i in range(quantity-1):
    for j in range(quantity-1):
        # 用自己的类创建数字按钮
        btn = myButton(root)
        btn.cnt = cnt
        btn.j = j
        btn.i = i
        btn.button()
        # 用计步器记录数值
        cnt += 1


# 创建最后一列的按钮
for j in range(quantity): 
    # 用自己的类创建符号按钮
    btn = myButton2(root)
    btn.j2 = j
    btn.button()

# 最后一行的符号
last_line = ['exit','0','=']

# 0按钮
btn_0 = Button(root, text='0',command = lambda:run2(self.value))
btn_0.place(relx=1*wide, rely=3*wide, relwidth=wide, relheight=wide)

# 等号按钮
btn_deng = Button(root, text='{}'.format(last_line[2]),command = lambda:run4())
btn_deng.place(relx=2*wide, rely=3*wide, relwidth=wide, relheight=wide)

# 结果显示文本框
lbl=Label(root,text='结果')
lbl.place(relx=0,rely=3*wide,relwidth=wide,relheight=wide)


# 运行
root.mainloop()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值