tkinter-计算器GUI界面,并用pyinstaller制作桌面应用程序

制作的结果:用自己制作的两种计算器

在这里插入图片描述

一:第一种计算器

在这里插入图片描述

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步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值