首页 文章

使用函数检查tkinter中的条目输入

提问于
浏览
1

我试图使用python tkinter创建物理计算器,但我发现它很难 . 我在命令行界面中完成了这个计算器,但我和tkinter有点不同 . 基本上,我有5个输入框,每个上面都有一个按钮 . 用户将在其中三个值中插入值,并应按下每个未知值顶部的按钮进行计算并获得结果 . 我的主要问题是如何创建一个函数来评估输入框中的输入并进行计算,然后在输入框中打印结果 . 我做了一些编码,但不幸的是由于几个错误,操作无法正常工作 .

这是我的编码部分:

from Tkinter import *
import math

class calculator():

    def is_positive_number(number): # validation function
         if number <= 0:
             return False
         else :
             return True

    def value_of_time(prompt):
        while True: # loop command for time 
            try:     
                valid = False
                while not valid:
                    value = float((prompt))
                    if is_positive_number(value):
                        valid = True
                        return value
                    else :
                        valid = False
                        print ('I donot know what is happening')
            except ValueError:
                print("Oops, unfortunately this is a wrong input, please try again.")
                #better try again... Return to the start of the loop
                continue
            else:
                #value was successfully parsed!
                #we're ready to exit the loop.
                break


    def input_of_box(prompt):
        while True: # loop for initial velocity
            try:
                value = float(input(prompt))
                return value
            except ValueError:
                print("Oops, we are you not typing a number, please try again.")
                #better try again... Return to the start of the loop
                continue
            else:
                #value was successfully parsed!
                #we're ready to exit the loop.
                break


    # def minput(numberofinput):
        if numberofinput == 1:
            t = value_of_time("Enter the time that takes an object to accelerate in seconds:")
            return 
        elif numberofinput == 2:
            u = input_of_box("Enter the initial velocity in m/s:")
            return
        elif numberofinput == 2:
            v = input_of_box("Enter the final velocity in m/s:")
            return



    def my_calculation(mvariables): # this function is to operate the calculation

        if mvariables == 1:
            a = (v-u) /(t)
            mentery1 = a
            return 

        elif mvariables == 2:
            v = u + a*t
            mentery2 = v
            return
        elif mvariables == 3:
            u = a*t - v
            mentery3 = t

        elif mvariables == 4:
            t = (v - u)/a
            mentery3 = t
            return
        elif mvariables == 5:
            s = (v**2-u**2)/2*a
            mentery4 = s
        else:
            print ('there is an error')




    cal = Tk()
    cal.configure(background='sky blue')
    a = StringVar()
    u = StringVar()
    v = StringVar()
    t = StringVar()
    s = StringVar()


    cal.geometry('650x420+350+225')

    cal.title('Main Menu')

    # here we start greating buttons and entry boxes
    m_label = Label(text='Calculator',fg = 'Navy', font=("Helvetica", 20,"bold italic"), bg='sky blue')
    m_label.pack()

    button1 = Button(cal,text='A',fg='white',bg='dark green',bd =3, width=4, command= lambda : my_calculation(1))
    button1.place(x=92,y=210)

    mentery1 = Entry(cal, textvariable = a ,width=10,bd =3)
    mentery1.place(x=82,y=240)

    button2 = Button(cal,text='U',fg='white',bg='dark green',bd =3, width=4, command= lambda : my_calculation(3))
    button2.place(x=192,y=210)

    mentery2 = Entry(cal, textvariable = u ,width=10,bd =3)
    mentery2.place(x=182,y=240)

    button3 = Button(cal,text='V',fg='white',bg='dark green',bd =3, width=4, command= lambda : my_calculation(2))
    button3.place(x=292,y=210)

    mentery3 = Entry(cal, textvariable = v ,width=10,bd =3)
    mentery3.place(x=282,y=240)

    button4 = Button(cal,text='T',fg='white',bg='dark green',bd =3, width=4,command= lambda : my_calculation(4))
    button4.place(x=392,y=210)

    mentery4 = Entry(cal, textvariable = t ,width=10,bd =3)
    mentery4.place(x=382,y=240)

    button5 = Button(cal,text='S',fg='white',bg='dark green',bd =3, width=4,command= lambda : my_calculation(5))
    button5.place(x=492,y=210)

    mentery5 = Entry(cal, textvariable = s , width=10,bd =3)
    mentery5.place(x=482,y=240)
    # end of button commands

app = calculator()
app.mainloop()

1 回答

  • 0

    要验证输入,请执行以下操作:

    def returnValidatedInput(entry):
        value = entry.get() # Get the text in the 'entry' widget
        evaluation = eval(value) # Evaluate 'value'
        return evaluation
    

    并将答案插入条目中(不称为将答案打印到条目中):

    def insertAnswer(entry, answer):
        entry.delete(0, 'end') # Be sure the entry is empty, if it is not, clear it
        entry.insert(END, str(answer)) # Insert the answer into the 'entry' widget.
    

相关问题