猫史档案馆


【Python】我肝了很久 求求给个赞吧!! 计算器

用户:爱Python的政政爱Python的政政查看:1 回复:4 评论:1 创建时间:2022-08-02T09:52:32


程序运行效果:center_image

from tkinter import *

W = 280  # 窗口宽度
H = 460  # 窗口高度
process_H = 110  # 显示运算过程的标签高度
result_H = 50  # 显示运算结果的标签高度
msFont = '微软雅黑'  # 字体
fontSize = 20  # 字体大小

btnBoderWidth = 0.5  # 边框宽度
btnColor = '#4F4F4F'  # 按钮颜色
btnWidth = 70  # 按钮宽度
btnHeight = 60  # 按钮高度

mainWindows = Tk()
mainWindows.title('计算器')
mainWindows.minsize(W, H)

str_process = StringVar()
str_process.set("")
str_result = StringVar()
str_result.set("0")

process = Label(mainWindows, font=(msFont, fontSize), bg='orange',
                anchor='se', wraplength='280', textvariable=str_process)
process.place(width=W, height=process_H)  # 显示运算过程的标签
result = Label(mainWindows, font=(msFont, fontSize+10),
               bg='orange', anchor='se', textvariable=str_result)
result.place(y=process_H, width=W, height=result_H)  # 显示运算结果的标签

button_AC = Button(mainWindows, font=(msFont, fontSize), text='AC',
                   fg='orange', bd=btnBoderWidth, command=lambda: clickAC())
button_AC.place(x=0, y=process_H+result_H, width=btnWidth, height=btnHeight)
button_back = Button(mainWindows, font=(msFont, fontSize), text='←',
                     fg=btnColor, bd=btnBoderWidth, command=lambda: clickBack())
button_back.place(x=btnWidth, y=process_H+result_H,
                  width=btnWidth, height=btnHeight)
button_div = Button(mainWindows, font=(msFont, fontSize), text='÷',
                    fg=btnColor, bd=btnBoderWidth, command=lambda: clickOper('/'))
button_div.place(x=btnWidth*2, y=process_H+result_H,
                 width=btnWidth, height=btnHeight)
button_mul = Button(mainWindows, font=(msFont, fontSize), text='×',
                    fg=btnColor, bd=btnBoderWidth, command=lambda: clickOper('*'))
button_mul.place(x=btnWidth*3, y=process_H+result_H,
                 width=btnWidth, height=btnHeight)

button_7 = Button(mainWindows, font=(msFont, fontSize), text='7',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('7'))
button_7.place(x=0, y=process_H+result_H+btnHeight,
               width=btnWidth, height=btnHeight)
button_8 = Button(mainWindows, font=(msFont, fontSize), text='8',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('8'))
button_8.place(x=btnWidth, y=process_H+result_H +
               btnHeight, width=btnWidth, height=btnHeight)
button_9 = Button(mainWindows, font=(msFont, fontSize), text='9',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('9'))
button_9.place(x=btnWidth*2, y=process_H+result_H +
               btnHeight, width=btnWidth, height=btnHeight)
button_minus = Button(mainWindows, font=(msFont, fontSize), text='-',
                      fg=btnColor, bd=btnBoderWidth, command=lambda: clickOper('-'))
button_minus.place(x=btnWidth*3, y=process_H+result_H +
                   btnHeight, width=btnWidth, height=btnHeight)

button_4 = Button(mainWindows, font=(msFont, fontSize), text='4',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('4'))
button_4.place(x=0, y=process_H+result_H+btnHeight *
               2, width=btnWidth, height=btnHeight)
button_5 = Button(mainWindows, font=(msFont, fontSize), text='5',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('5'))
button_5.place(x=btnWidth, y=process_H+result_H+btnHeight *
               2, width=btnWidth, height=btnHeight)
button_6 = Button(mainWindows, font=(msFont, fontSize), text='6',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('6'))
button_6.place(x=btnWidth*2, y=process_H+result_H +
               btnHeight*2, width=btnWidth, height=btnHeight)
button_add = Button(mainWindows, font=(msFont, fontSize), text='+',
                    fg=btnColor, bd=btnBoderWidth, command=lambda: clickOper('+'))
button_add.place(x=btnWidth*3, y=process_H+result_H +
                 btnHeight*2, width=btnWidth, height=btnHeight)

button_1 = Button(mainWindows, font=(msFont, fontSize), text='1',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('1'))
button_1.place(x=0, y=process_H+result_H+btnHeight *
               3, width=btnWidth, height=btnHeight)
button_2 = Button(mainWindows, font=(msFont, fontSize), text='2',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('2'))
button_2.place(x=btnWidth, y=process_H+result_H+btnHeight *
               3, width=btnWidth, height=btnHeight)
button_3 = Button(mainWindows, font=(msFont, fontSize), text='3',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('3'))
button_3.place(x=btnWidth*2, y=process_H+result_H +
               btnHeight*3, width=btnWidth, height=btnHeight)
button_equal = Button(mainWindows, font=(msFont, fontSize), text='=',
                      bg='orange', fg=btnColor, bd=btnBoderWidth, command=lambda: clickEqual())
button_equal.place(x=btnWidth*3, y=process_H+result_H +
                   btnHeight*3, width=btnWidth, height=btnHeight*2)

button_percent = Button(mainWindows, font=(msFont, fontSize), text='%',
                        fg=btnColor, bd=btnBoderWidth, command=lambda: clickOper("%"))
button_percent.place(x=0, y=process_H+result_H+btnHeight *
                     4, width=btnWidth, height=btnHeight)
button_0 = Button(mainWindows, font=(msFont, fontSize), text='0',
                  fg=btnColor, bd=btnBoderWidth, command=lambda: clickNum('0'))
button_0.place(x=btnWidth, y=process_H+result_H+btnHeight *
               4, width=btnWidth, height=btnHeight)
button_point = Button(mainWindows, font=(msFont, fontSize), text='.',
                      fg=btnColor, bd=btnBoderWidth, command=lambda: clickPoint())
button_point.place(x=btnWidth*2, y=process_H+result_H +
                   btnHeight*4, width=btnWidth, height=btnHeight)

process_list = []
s_result = ""
isNum = [False]  # 上一位按下的是否是数字
point = [True]  # 小数点使用情况


def clickNum(num):  # 按下数字
    isNum.append(True)
    point.append(point[-1])  # 按下数字,小数点的标志不变
    process_list.append(num)
    s_process = "".join(process_list)
    str_process.set(s_process)


def clickOper(sign):  # 按下运算符
    global isNum, point
    if isNum[-1]:
        process_list.append(sign)
        isNum.append(False)
        point.append(True)  # 按下运算符,小数点标志为可以按下小数点
    else:
        process_list.pop()
        process_list.append(sign)
    s_process = "".join(process_list)
    str_process.set(s_process)


def clickEqual():  # 按下等于
    global s_result
    s_process = "".join(process_list)
    s_result = eval(s_process)
    s_result = str(s_result)[0:11]  # 结果只显示11位
    str_process.set(s_process)
    str_result.set(s_result)


def clickAC():  # 按下清除
    global s_result, isNum, point
    s_result = "0"
    isNum = [False]  # 状态回到初始时候
    point = [True]
    process_list.clear()
    str_result.set(s_result)
    str_process.set("")


def clickBack():  # 按下退格键
    global point, isNum
    if len(process_list) > 0:
        isNum.pop(-1)  # 删除最后一位的状态
        point.pop(-1)
        process_list.pop()
        s_process = "".join(process_list)
        str_process.set(s_process)


def clickPoint():  # 按下小数点
    global point, isNum
    if isNum[-1] and point[-1]:
        process_list.append(".")
        s_process = "".join(process_list)
        str_process.set(s_process)
        isNum.append(False)
        point.append(False)


mainWindows.mainloop()


回复

上一页1 页 / 共 1下一页
初夏晴雨初夏晴雨

厉害厉害厉害!

点赞2


评论


#逸一时误一世##逸一时误一世#

压力马斯内(赞赏

点赞2


评论


无事勿扰111无事勿扰111

大佬666

点赞2


评论


天下第一皮卡丘天下第一皮卡丘

虽然是个学python一年的人都会做,但在猫站已经少有了

点赞2


评论