第一次作业

Tkinter库:Tkinter是Python的标准GUI库。使用Tkinter库可以可以快速的创建GUI应用程序。

1、创建计算器的窗口

# 创建一个窗口

root = tk.Tk()

root.minsize(300, 480)

root.title('计算器')

result1 = tk.StringVar()

result1.set(0)

result2 = tk.StringVar()

result2.set('')

2、设置屏幕显示

#算式显示

screen2 = tk.Label(root, font=('微软雅黑', 20), bg='#EEE9E9', bd='9', fg='black', textvariable=result1, anchor='se')

screen2.place(width=300, height=170)

#结果显示

screen1 = tk.Label(root, font=('微软雅黑', 30), bg='#0000FF', bd='9', fg='black', textvariable=result2, anchor='se')

screen1.place(width=300, height=110)

3、申明并定义点击函数

# 操作函数

lists = []

ispressfunction = False

ispressnumber = False

ispressequal = False

1、#点击数字定义

def pressnumber(num):

    global lists

    global ispressfunction

    global ispressequal

 

    if ispressequal == False:

        pass

    else:

        ispressequal = False

        result1.set('')

 

    if ispressfunction == False:

        pass

    else:

        result1.set(0)

        ispressfunction = False

 

    oldnum = result1.get()

    if oldnum == '0':

        result1.set(num)

    else:

        newnum = oldnum + num

        result1.set(newnum)

2、# 点击功能键定义

def pressfunction(stringlist):

    global lists

    global ispressfunction

    global ispressequal

 

    num = result1.get()

    lists.append(num)

    shizi = ''

    ispressfunction = True

 

    if stringlist in ['-', '+', '/', '*']:

 

        lists.append(stringlist)

        for each in lists:

            shizi += each

        result2.set(shizi)

 

    if stringlist == '1/2':

            list1 = []

            numnow = result1.get()

            list1.append("sqrt(" + numnow + ")")

            sqrt1 = m.pow(int(numnow),1/2)

            result2.set(list1)

            result1.set(sqrt1)

 

    if stringlist == 'C':

        lists.pop()

        result1.set(0)

        ispressfunction = False

        ispressnumber = False

        ispressequal = False

 

    if stringlist == 'CE':

        lists.clear()

        result1.set(0)

        result2.set('')

 

    if stringlist == '←':

        a = num[0:-1]

        lists.pop()

        result1.set(a)

4、定义按键位置

# 第一行

buttonce = tk.Button(root, font=('微软雅黑', 20), text='1/2', bd='0.5', fg='blue', command=lambda: pressfunction('1/2'))

buttonce.place(x=140, y=170, width=60, height=50)

 

buttonc = tk.Button(root, font=('微软雅黑', 20), text='C', bd='0.5', bg='orange', fg='black', command=lambda: pressfunction('C'))

buttonc.place(x=70, y=170, width=60, height=50)

 

buttondelete = tk.Button(root, font=('微软雅黑', 20), text='←', bd='0.5',bg='orange', fg='black',command=lambda: pressfunction('←'))

buttondelete.place(x=0, y=170, width=60, height=50)

 

buttondiv = tk.Button(root, font=('微软雅黑', 20), text='÷', bd='0.5', fg='blue', command=lambda: pressfunction('/'))

buttondiv.place(x=220, y=170, width=70, height=50)

# 第二行

button7 = tk.Button(root, font=('微软雅黑', 20), text='7', bd='0.5', bg='white', command=lambda: pressnumber('7'))

button7.place(x=0, y=230, width=60, height=50)

 

button8 = tk.Button(root, font=('微软雅黑', 20), text='8', bd='0.5', bg='white', command=lambda: pressnumber('8'))

button8.place(x=70, y=230, width=60, height=50)

 

button9 = tk.Button(root, font=('微软雅黑', 20), text='9', bd='0.5', bg='white', command=lambda: pressnumber('9'))

button9.place(x=140, y=230, width=60, height=50)

 

buttonmul = tk.Button(root, font=('微软雅黑', 20), text='×', bd='0.5', fg='blue', command=lambda: pressfunction('*'))

buttonmul.place(x=220, y=230, width=70, height=50)

# 第三行

button4 = tk.Button(root, font=('微软雅黑', 20), text='4', bd='0.5', bg='white', command=lambda: pressnumber('4'))

button4.place(x=0, y=290, width=60, height=50)

 

button5 = tk.Button(root, font=('微软雅黑', 20), text='5', bd='0.5', bg='white', command=lambda: pressnumber('5'))

button5.place(x=70, y=290, width=60, height=50)

 

button6 = tk.Button(root, font=("微软雅黑", 20), text='6', bd='0.5', bg='white', command=lambda: pressnumber('6'))

button6.place(x=140, y=290, width=60, height=50)

 

buttonsub = tk.Button(root, font=('微软雅黑', 20), text='-', bd='0.5', fg='blue', command=lambda: pressfunction('-'))

buttonsub.place(x=220, y=290, width=70, height=50)

# 第四行

button1 = tk.Button(root, font=('微软雅黑', 20), text='1', bd='0.5', bg='white', command=lambda: pressnumber('1'))

button1.place(x=0, y=350, width=60, height=50)

 

button2 = tk.Button(root, font=('微软雅黑', 20), text='2', bd='0.5', bg='white', command=lambda: pressnumber('2'))

button2.place(x=70, y=350, width=60, height=50)

 

button3 = tk.Button(root, font=("微软雅黑", 20), text='3', bd='0.5', bg='white', command=lambda: pressnumber('3'))

button3.place(x=140, y=350, width=60, height=50)

 

buttonadd = tk.Button(root, font=('微软雅黑', 20), text='+', bd='0.5', fg='blue', command=lambda: pressfunction('+'))

buttonadd.place(x=220, y=350, width=70, height=50)

# 第五行

buttoninverse = tk.Button(root, font=("微软雅黑", 20), text='CE', bg='orange', bd='0.5', fg='black',command=lambda: pressfunction('CE'))

buttoninverse.place(x=0, y=410, width=60, height=50)

 

button0 = tk.Button(root, font=("微软雅黑", 20), text='0', bd='0.5', bg='white', command=lambda: pressnumber('0'))

button0.place(x=70, y=410, width=60, height=50)

 

buttonpoint = tk.Button(root, font=("微软雅黑", 20), text='.', bd='0.5', fg='blue', command=lambda: pressnumber('.'))

buttonpoint.place(x=140, y=410, width=60, height=50)

 

buttonvalue = tk.Button(root, font=("微软雅黑", 20), text='=', bd='0.5', bg='orange', fg='black',command=lambda: pressequal())

buttonvalue.place(x=220, y=410, width=70, height=50)

 

 

5、#申明并定义结果函数

def pressequal():

    global lists

    global ispressfunction

    global ispressequal

 

    ispressequal = True

    curnum = result1.get()

    lists.append(curnum)

    computrStr = ''.join(lists)

    endnum = eval(computrStr)

    result1.set(endnum)

    result2.set(computrStr)

    lists.clear()

 

root.mainloop()

运算结果计算得知:

程序流程图

 

 

以下是关键代码:

import tkinter as tk  # 导入tkinter模块

import math as m

 

# 创建一个窗口

root = tk.Tk()

root.minsize(300, 480)

root.title('计算器')

result1 = tk.StringVar()

result1.set(0)

result2 = tk.StringVar()

result2.set('')

 

# 显示屏幕

#算式显示

screen2 = tk.Label(root, font=('微软雅黑', 20), bg='#EEE9E9', bd='9', fg='black', textvariable=result1, anchor='se')

screen2.place(width=300, height=170)

#结果显示

screen1 = tk.Label(root, font=('微软雅黑', 30), bg='#0000FF', bd='9', fg='black', textvariable=result2, anchor='se')

screen1.place(width=300, height=110)

 

# 第一行

buttonce = tk.Button(root, font=('微软雅黑', 20), text='1/2', bd='0.5', fg='blue', command=lambda: pressfunction('1/2'))

buttonce.place(x=140, y=170, width=60, height=50)

 

buttonc = tk.Button(root, font=('微软雅黑', 20), text='C', bd='0.5', bg='orange', fg='black', command=lambda: pressfunction('C'))

buttonc.place(x=70, y=170, width=60, height=50)

 

buttondelete = tk.Button(root, font=('微软雅黑', 20), text='←', bd='0.5',bg='orange', fg='black',command=lambda: pressfunction('←'))

buttondelete.place(x=0, y=170, width=60, height=50)

 

buttondiv = tk.Button(root, font=('微软雅黑', 20), text='÷', bd='0.5', fg='blue', command=lambda: pressfunction('/'))

buttondiv.place(x=220, y=170, width=70, height=50)

# 第二行

button7 = tk.Button(root, font=('微软雅黑', 20), text='7', bd='0.5', bg='white', command=lambda: pressnumber('7'))

button7.place(x=0, y=230, width=60, height=50)

 

button8 = tk.Button(root, font=('微软雅黑', 20), text='8', bd='0.5', bg='white', command=lambda: pressnumber('8'))

button8.place(x=70, y=230, width=60, height=50)

 

button9 = tk.Button(root, font=('微软雅黑', 20), text='9', bd='0.5', bg='white', command=lambda: pressnumber('9'))

button9.place(x=140, y=230, width=60, height=50)

 

buttonmul = tk.Button(root, font=('微软雅黑', 20), text='×', bd='0.5', fg='blue', command=lambda: pressfunction('*'))

buttonmul.place(x=220, y=230, width=70, height=50)

# 第三行

button4 = tk.Button(root, font=('微软雅黑', 20), text='4', bd='0.5', bg='white', command=lambda: pressnumber('4'))

button4.place(x=0, y=290, width=60, height=50)

 

button5 = tk.Button(root, font=('微软雅黑', 20), text='5', bd='0.5', bg='white', command=lambda: pressnumber('5'))

button5.place(x=70, y=290, width=60, height=50)

 

button6 = tk.Button(root, font=("微软雅黑", 20), text='6', bd='0.5', bg='white', command=lambda: pressnumber('6'))

button6.place(x=140, y=290, width=60, height=50)

 

buttonsub = tk.Button(root, font=('微软雅黑', 20), text='-', bd='0.5', fg='blue', command=lambda: pressfunction('-'))

buttonsub.place(x=220, y=290, width=70, height=50)

# 第四行

button1 = tk.Button(root, font=('微软雅黑', 20), text='1', bd='0.5', bg='white', command=lambda: pressnumber('1'))

button1.place(x=0, y=350, width=60, height=50)

 

button2 = tk.Button(root, font=('微软雅黑', 20), text='2', bd='0.5', bg='white', command=lambda: pressnumber('2'))

button2.place(x=70, y=350, width=60, height=50)

 

button3 = tk.Button(root, font=("微软雅黑", 20), text='3', bd='0.5', bg='white', command=lambda: pressnumber('3'))

button3.place(x=140, y=350, width=60, height=50)

 

buttonadd = tk.Button(root, font=('微软雅黑', 20), text='+', bd='0.5', fg='blue', command=lambda: pressfunction('+'))

buttonadd.place(x=220, y=350, width=70, height=50)

# 第五行

buttoninverse = tk.Button(root, font=("微软雅黑", 20), text='CE', bg='orange', bd='0.5', fg='black',command=lambda: pressfunction('CE'))

buttoninverse.place(x=0, y=410, width=60, height=50)

 

button0 = tk.Button(root, font=("微软雅黑", 20), text='0', bd='0.5', bg='white', command=lambda: pressnumber('0'))

button0.place(x=70, y=410, width=60, height=50)

 

buttonpoint = tk.Button(root, font=("微软雅黑", 20), text='.', bd='0.5', fg='blue', command=lambda: pressnumber('.'))

buttonpoint.place(x=140, y=410, width=60, height=50)

 

buttonvalue = tk.Button(root, font=("微软雅黑", 20), text='=', bd='0.5', bg='orange', fg='black',command=lambda: pressequal())

buttonvalue.place(x=220, y=410, width=70, height=50)

 

# 操作函数

lists = []

ispressfunction = False

ispressnumber = False

ispressequal = False

 

# 数字按键定义

def pressnumber(num):

    global lists

    global ispressfunction

    global ispressequal

 

    if ispressequal == False:

        pass

    else:

        ispressequal = False

        result1.set('')

 

    if ispressfunction == False:

        pass

    else:

        result1.set(0)

        ispressfunction = False

 

    oldnum = result1.get()

    if oldnum == '0':

        result1.set(num)

    else:

        newnum = oldnum + num

        result1.set(newnum)

 

 

# 功能键定义

def pressfunction(stringlist):

    global lists

    global ispressfunction

    global ispressequal

 

    num = result1.get()

    lists.append(num)

    shizi = ''

    ispressfunction = True

 

    if stringlist in ['-', '+', '/', '*']:

 

        lists.append(stringlist)

        for each in lists:

            shizi += each

        result2.set(shizi)

 

    if stringlist == '1/2':

            list1 = []

            numnow = result1.get()

            list1.append("sqrt(" + numnow + ")")

            sqrt1 = m.pow(int(numnow),1/2)

            result2.set(list1)

            result1.set(sqrt1)

 

 

    if stringlist == 'C':

        lists.pop()

        result1.set(0)

        ispressfunction = False

        ispressnumber = False

        ispressequal = False

 

    if stringlist == 'CE':

        lists.clear()

        result1.set(0)

        result2.set('')

 

    if stringlist == '←':

        a = num[0:-1]

        lists.pop()

        result1.set(a)

 

 

# 结果

def pressequal():

    global lists

    global ispressfunction

    global ispressequal

 

    ispressequal = True

    curnum = result1.get()

    lists.append(curnum)

    computrStr = ''.join(lists)

    endnum = eval(computrStr)

    result1.set(endnum)

    result2.set(computrStr)

    lists.clear()

 

root.mainloop()

posted @ 2023-10-12 17:30  Gnaix  阅读(40)  评论(0)    收藏  举报