首页 > 解决方案 > 我被困在试图修复第 78 行

问题描述

我已经完全重做我的代码,并且在第 78 行出现语法错误,pennies=float(int(pennies.get())*.01.format$(.2f)位于pennies.get(). 箭头指向便士和得到之间的时间段。我对此真的很陌生,我不知道如何解决这个错误。我最初发布了不同的代码,但它不正确。

代码:

from tkinter import*

money=Tk()

money.title("The amount of Money on hand")
Label(money,text='****Please provide the money you have and hit, Compute:***').grid(row=0,columnspan=5)
Label(money,text='Pennies').grid(row=1,column=0)
Label(money,text='Nickels').grid(row=2,column=0)
Label(money,text='Dimes').grid(row=3,column=0)
Label(money,text='Quarters').grid(row=4,column=0)
Label(money,text='Half Dollar Coin').grid(row=5,column=0)
Label(money,text='Dollar Coin').grid(row=6,column=0)
Label(money,text='Cash Dollar').grid(row=7,column=0)
Label(money,text='Cash 5 Dollar').grid(row=8,column=0)
Label(money,text='Cash 10 Dollar').grid(row=9,column=0)
Label(money,text='Cash 20 Dollar').grid(row=10,column=0)

Button(money,text='Quit',command=money.destroy).grid(row=11,column=0,sticky=W,pady=5)

Pennies=Entry(money)
Pennies.grid(row=1,column=1)
Nickels=Entry(money)
Nickels.grid(row=2,column=1)
Dimes=Entry(money)
Dimes.grid(row=3,column=1)
Quarters=Entry(money)
Quarters.grid(row=4,column=1)
Half_Dollar_Coin=Entry(money)
Half_Dollar_Coin.grid(row=5,column=1)
Dollar_Coin=Entry(money)
Dollar_Coin.grid(row=6,column=1)
Cash_Dollar=Entry(money)
Cash_Dollar.grid(row=7,column=1)
Cash_5_Dollar=Entry(money)
Cash_5_Dollar.grid(row=8,column=1)
Cash_10_Dollar=Entry(money)
Cash_10_Dollar.grid(row=9,column=1)
Cash_20_Dollar=Entry(money)
Cash_20_Dollar.grid(row=10,column=1)

Label(money,text='Pennies Value $:').grid(row=1,column=2)
Label(money,text='Nickels Value $:').grid(row=2,column=2)
Label(money,text='Dimes Value $:').grid(row=3,column=2)
Label(money,text='Quarters Value $:').grid(row=4,column=2)
Label(money,text='Half Dollar Coin Value $:').grid(row=5,column=2)
Label(money,text='Dollar Coin Value $:').grid(row=6,column=2)
Label(money,text='Cash Dollar Value $').grid(row=7,column=2)
Label(money,text='Cash 5 Dollar Value $').grid(row=8,column=2)
Label(money,text='Cash 10 Dollar Value $:').grid(row=9,column=2)
Label(money,text='Cash 20 Dollar Value $:').grid(row=10,column=2)
Label(money,text='Total').grid(row=11,column=2)


Pennies=Entry(money)
Pennies.grid(row=1,column=3)
Nickels=Entry(money)
Nickels.grid(row=2,column=3)
Dimes=Entry(money)
Dimes.grid(row=3,column=3)
Quarters=Entry(money)
Quarters.grid(row=4,column=3)
Half_Dollar_Coin=Entry(money)
Half_Dollar_Coin.grid(row=5,column=3)
Dollar_Coin=Entry(money)
Dollar_Coin.grid(row=6,column=3)
Cash_Dollar=Entry(money)
Cash_Dollar.grid(row=7,column=3)
Cash_5_Dollar=Entry(money)
Cash_5_Dollar.grid(row=8,column=3)
Cash_10_Dollar=Entry(money)
Cash_10_Dollar.grid(row=9,column=3)
Cash_20_Dollar=Entry(money)
Cash_20_Dollar.grid(row=10,column=3)
Total=Entry(money)
Total.grid(row=11,column=3)

def total_result():
   Pennies=float(int(Pennies.get())*.01)
   Nickels=float(int(Nichols.get())*.05)
   Dimes=float(int(Dimes.get())*.10)
   Quarters=float(int(Quarters.get())*.25)
   Half_Dollar_Coin=float(int(Half_Dollar_Coin.get())*.50)
   Dollar_Coin=float(int(Dollar_Coin.get())*1)
   Cash_Dollar=float(int(Cash_Dollar.get())*1)
   Cash_5_Dollar=float(int(Cash_5_Dollar.get())*5)
   Cash_10_Dollar=float(int(Cash_10_Dollar.get())*10)
   Cash_20_Dollar=float(int(Cash_20_Dollar.get())*20)

result='Pennies' + 'Nickels' + 'Dimes' + 'Quarters' + 'Half_Dollar_Coin' + 'Dollar_Coin' + 'Cash_Dollar' +'Cash_5_Dollar' + 'Cash_10_Dollar' + 'Cash_20_Dollar'

Button(money,text='Compute',command=total_result).grid(row=11,column=1,sticky=E,pady=5)

def only_numeric_input(x):
   if e.isdigit():
      return True
   elif e=="":
      return True
   else:
      return True
Pennies.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Nickels.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Dimes.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Quarters.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Half_Dollar_Coin.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Dollar_Coin.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Cash_Dollar.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Cash_5_Dollar.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Cash_10_Dollar.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Cash_20_Dollar.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P')) 

在等待帮助时,我将尝试在 Python 中重新输入它。谢谢!

标签: pythontkinter

解决方案


当您创建用于显示值的条目时,您会重新使用输入条目中的名称,从而丢失对输入条目的引用。我改为重命名条目以显示值Pennies_value等。

再次在函数中total_result()重新分配输入条目的名称,这次是引用浮点数。

如果您希望能够进行多次计算,您必须首先从条目中删除所有内容。然后将计算的值写入条目。

如果输入条目包含“”,则计算将不起作用,因此在这种情况下您必须将值转换为 0。我正在使用以下表达式执行此操作:

int(Pennies.get() or 0) 

它评估来自Pennies.get(): 如果它是False("") 的返回,则该int()函数将使用 0 代替。

最后,当您计算总数时,您必须从显示条目中获取值。请参见下面的示例:

from tkinter import*

money = Tk()

money.title("The amount of Money on hand")
Label(money,text='****Please provide the money you have and hit, Compute:***').grid(row=0, columnspan=5)
Label(money,text='Pennies').grid(row=1, column=0)
Label(money,text='Nickels').grid(row=2, column=0)

Button(money, text='Quit', command=money.destroy).grid(row=11, column=0, sticky=W, pady=5)

# Entrys for number of coins/bills
Pennies = Entry(money)
Pennies.grid(row=1, column=1)
Nickels = Entry(money)
Nickels.grid(row=2, column=1)

Label(money, text='Pennies Value $:').grid(row=1, column=2)
Label(money, text='Nickels Value $:').grid(row=2, column=2)
Label(money, text='Total').grid(row=11, column=2)

# Entrys for display of value of coins/bills
Pennies_value = Entry(money)
Pennies_value.grid(row=1, column=3)
Nickels_value = Entry(money)
Nickels_value.grid(row=2, column=3)
Total_value = Entry(money)
Total_value.grid(row=11, column=3)

def total_result():
    Pennies_value.delete(0, "end")  # Delete entry contents from pos 0 till "end"
    Pennies_value.insert(0, int(Pennies.get() or 0)*.01)    # Insert text at pos 0
    Nickels_value.delete(0, "end")
    Nickels_value.insert(0, int(Nickels.get() or 0)*.05)
    result = (float(Pennies_value.get()) +
              float(Nickels_value.get()))
    Total_value.delete(0, "end")
    Total_value.insert(0, result)

Button(money, text='Compute', command=total_result).grid(row=11, column=1, sticky=E, pady=5)

def only_numeric_input(e):
    if e.isdigit():
        return True
    elif e=="":
        return True
    else:
        return False

# Configure input Entrys validation
Pennies.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))
Nickels.configure(validate='key',validatecommand=(money.register(only_numeric_input),'%P'))

money.mainloop()

推荐阅读