【问题标题】:Unexpected output from python tkinter "calculator"python tkinter“计算器”的意外输出
【发布时间】:2018-07-17 10:45:55
【问题描述】:

这里是代码

from tkinter import*


def final_calculation():
    entryField.delete(0,'end') 
    Wood = entryWood.get()
    Steal = entrySteal.get()
    output_wood = (Wood *wood_c02)
    output_steal = (Steal * steal_c02 )
    final = (output_steal + output_wood *c02_coal)
    entry.set(final)


steal_c02 = int (5.5)
wood_c02 = int (1.2)
c02_coal = int (0.94)


root = Tk()
root.configure(background="black")
root.title("C02 caculator")
root.resizable(1,0)
root.columnconfigure(0,weight=1)
root.columnconfigure(1,weight=1)



entry = StringVar()
entryField = Entry(root, textvariable=entry,background="white",foreground="black",justify=CENTER)
entryField.grid(row=0,column=0,columnspan=2,sticky=W+E)
entryField.columnconfigure(0,weight=1)


labelWood = Label(root, text="Amount of wood",background="black",foreground="grey90")
labelWood.grid(row=1,column=0, sticky=E)

labelSteal = Label(root, text="Amount of steal",background="black",foreground="grey90")
labelSteal.grid(row=2,column=0, sticky=E)

entryWood = Entry(root,background="grey80",foreground="black")
entryWood.grid(row=1,column=1,sticky=W)

entrySteal = Entry(root,background="grey80",foreground="black")
entrySteal.grid(row=2,column=1,sticky=W)

button = Button(root, text="caculate C02", command= final_calculation)
button.grid(row=3, columnspan=2)





root.mainloop()

按运行,一切都很好。在您计算出问题中重新解决的总和之前,即第二个输入重复 5 次并显示为输出,任何帮助都会很有帮助。

亲切的问候:49.95

【问题讨论】:

  • 您的变量是字符串,而不是整数。你必须转换它们:Wood = int(entryWood.get()) ....
  • 谢谢你解决了部分问题,但它仍然只是 * 5 的第二个数字
  • int(5.5) => 5. 你可能想要 float() 在这里。

标签: python tkinter error-handling


【解决方案1】:

您在数据类型上搞混了。让我们看看你的代码。

在这里,您将十进制数字转换为int。整数是一个四舍五入的数字(例如 0、1、2、3、4、...)。当您执行int(5.5) 时,您基本上会删除小数点后面的所有信息:

steal_c02 = int (5.5) # = 5
wood_c02 = int (1.2) # = 1
c02_coal = int (0.94) # = 0

您从 Entry 小部件中获得的是字符串对象。尽管它们可能包含数字,但它们被视为文本,而不是数字。
例如

Wood = entryWood.get() # Wood = '10'
Steal = entrySteal.get() # Steal = '1.5'
output_wood = (Wood *wood_c02)

因为Wood = '10'wood_c02 = 1,您将字符串与整数相乘。这有效,但不符合您的预期。在 python 中你执行'a'*5,你得到'aaaaa'。所以在这种情况下,Wood *wood_c02'10'*1'10'

output_steal = (Steal * steal_c02 )

这里是 Steal = '1.5'steal_c02 = 5,同样适用:Steal * steal_c02'1.5'*5'1.51.51.51.51.5'

final = (output_steal + output_wood *c02_coal)

这里是output_steal = '1.51.51.51.51.5'output_wood = '10'c02_coal = 0'10'*0 = '''1.51.51.51.51.5' + '' = '1.51.51.51.51.5',你输入了 final


你想用数字而不是字符串来计算,所以你应该将你的输入内容转换为数字(请记住,如果输入不能转换为数字,这将失败)

Wood = float(entryWood.get())
Steal = float(entrySteal.get())

您还希望 steal_c02wood_c02c02_coal 是十进制数,所以不要将它们转换为整数:

steal_c02 = 5.5
wood_c02 = 1.2
c02_coal = 0.94

【讨论】:

  • 上帝保佑你甜蜜的鞋底
猜你喜欢
  • 2020-03-18
  • 2016-12-09
  • 2015-09-25
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多