【问题标题】:What is the reason of this error I'm getting when using tkinter for a math app将 tkinter 用于数学应用程序时出现此错误的原因是什么
【发布时间】: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


【解决方案1】:

在第 19-21 行,我添加了float。第 22 行,我删除了float。同样对于 LABEL 小部件,我更改了 x、y 位置。在第 23 行,我还将 LABEL 放在 ENTRY 下方

这是代码:

from tkinter import *

root=Tk()
root.title('Math')

canvas1 = Canvas(root, width = 400, height = 320)
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 = float(entry1.get())
      r = float(entry2.get())
      t = float(entry3.get()      )
      labelans = Label(root, text=(p*r*t)/100)
      canvas1.create_window(200, 250, window=labelans)

label1 = Label(root, text="Time") 
canvas1.create_window(120, 140, window=label1)

label2 = Label(root, text="Rate")
canvas1.create_window(120,180, window=label2)

label3 = Label(root, text="Principal")
canvas1.create_window(110, 220, window=label3)

button1 = Button(text='Solve!', bg="red", command=getvalue)
canvas1.create_window(200, 300, window=button1)

mainloop()

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多