【发布时间】:2022-11-22 22:55:36
【问题描述】:
我正在制作一个程序来完成我的大部分作业。我试图添加一些用户界面,但它在我的代码中出现错误。请告诉我出了什么问题。让 13 岁的孩子足够容易理解,因为我是 python 的新手。仅当我使用画布时才会出现错误。如果我使用窗口,那么它不会,但我想使用画布,因为我可以更准确地改变它们的位置
from tkinter import *
root=Tk()
canvas1 = Canvas(root, width = 400, height = 300)
canvas1.pack()
entry1 = Entry (root)
canvas1.create_window(200, 140, window=entry1)
entry2 = Entry (root)
canvas1.create_window(200, 180, window=entry2)
entry3 = Entry (root)
canvas1.create_window(200, 220, window=entry3)
def getvalue():
p=entry1.get()
r=entry2.get()
t=entry3.get()
labelans = Label(root, text = float(p*r*t)/100)
canvas1.create_window(200, 230, window=labelans)
label1 = Label(root, text="Time")
canvas1.create_window(437, 220, window=label1)
label2 = Label(root, text="Rate")
canvas1.create_window(437,180, window=label2)
label3 = Label(root, text="Principal")
canvas1.create_window(465, 140, window=label3)
button1 = Button(text='Solve!', bg="red", command=getvalue)
canvas1.create_window(200, 300, window=button1)
mainloop()
*它给出了这个错误
Exception in Tkinter callback
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/arm-linux-androideabi/lib/python3.9/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 17, in getvalue
labelans = Label(root, text = float(p*r*t)/100)
TypeError: can't multiply sequence by non-int of type 'str'
Exception in Tkinter callback
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/arm-linux-androideabi/lib/python3.9/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 17, in getvalue
labelans = Label(root, text = float(p*r*t)/100)
TypeError: can't multiply sequence by non-int of type 'str'
Exception in Tkinter callback
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/arm-linux-androideabi/lib/python3.9/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 17, in getvalue
labelans = Label(root, text = float(p*r*t)/100)
TypeError: can't multiply sequence by non-int of type 'str'
Exception in Tkinter callback
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/arm-linux-androideabi/lib/python3.9/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 17, in getvalue
labelans = Label(root, text = float(p*r*t)/100)
TypeError: can't multiply sequence by non-int of type 'str'
Exception in Tkinter callback
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/arm-linux-androideabi/lib/python3.9/tkinter/__init__.py", line 1892, in __call__
return self.func(*args)
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 17, in getvalue
labelans = Label(root, text = float(p*r*t)/100)
TypeError: can't multiply sequence by non-int of type 'str'*
【问题讨论】:
-
不要把所有的文字都加粗,只把重要的加粗。
-
您的条目的内容是字符串,而不是数字。他们需要单独应用
float()-float(p*r*t)不起作用,因为在尝试将字符串相乘时发生故障,在此之前float()可以做任何事情。 -
您应该键入
int(entryN.get())以获得可以相乘的数字。 -
此外,如果您希望在键入字母而不是数字时显示错误消息,请执行
if letters in entryN.get(): messagebox.showerror("Error",'Type numbers! \nat entryN.')。
标签: python python-3.x tkinter