如何在tkinter条目小部件上第二次从用户获取值

时间:2020-01-11 10:16:57

标签: python python-3.x tkinter

在这里,我正在编写代码以向用户提供不同的“模式”选项,在按下模式按钮后,我的输入小部件会弹出并从用户那里获取两个值以进行进一步的工作。 一旦用户按下“输入”按钮,我的小部件将被销毁。 这是我的代码,它成功地从用户那里获取了一次值,但是当用户第二次提供值时,它显示了错误。

import tkinter as tk
import time
root=tk.Tk()
root.geometry("600x600")
root.title("User Interface Monitor")
rpm=tk.StringVar()
tim=tk.StringVar()
def  enter():
    global rpm,tim
    root.rpmLabel=tk.Label(root,text="enter rpm value:")
    root.rpmLabel.grid(row=0)
    root.timeLabel=tk.Label(root,text="enter time in sec")
    root.timeLabel.grid(row=1)
    root.e1 = tk.Entry(root, textvariable=rpm)
    root.e1.grid(row=0, column=1)
    root.e1.delete(0,"end")
    root.e2 = tk.Entry(root, textvariable=tim)
    root.e2.grid(row=1, column=1)
    root.e2.delete(0, "end")
    #rpm=rpm.get()
    #tim=tim.get()
    #return rpm,tim
def gett():
    global rpm, tim
    rpm = rpm.get()
    tim = tim.get()
    print(rpm)
    print(tim)
    root.rpmLabel.destroy()
    root.e1.destroy()
    root.timeLabel.destroy()
    root.e2.destroy()
    #e1.pack()
    #e2.pack()
root.Button1=tk.Button(root,text="MODE1",command=enter)
root.Button1.pack()
root.Button1.place(x=200,y=200)
root.Button2=tk.Button(root,text="Enter",command=gett)#root.Button2.pack()
root.Button2.place(x=260,y=200)
root.mainloop()

这是我的错误

C:/Users/RAM/PycharmProjects/timing/rpm.py
23
2
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\RAM\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "C:/Users/RAM/PycharmProjects/timing/rpm.py", line 25, in gett
    rpm = rpm.get()
AttributeError: 'str' object has no attribute 'get'

Process finished with exit code 0

我是Python的新手,我找不到使用“ delete”和“ reset”尝试的此错误的解决方案。

2 个答案:

答案 0 :(得分:1)

问题在于,rpmStringVar开头,然后在以下代码行中将其重置为字符串:

rpm = rpm.get()

运行该行代码后,rpm不再是StringVar。一个简单的解决方案是在获取值时使用其他名称:

rpm_value = rpm.get()

答案 1 :(得分:-1)

在这里,仔细观察错误消息后... 我按照布莱恩的建议更改了代码行

rpm = rpm.get()
tim = tim.get()

rpm_value = rpm.get()
tim_value = tim.get()

然后它完全按照我的要求工作。 这是我的输出:

C:/Users/RAM/PycharmProjects/timing/rpm.py

rpm is : 740
time is : 12
want to test again?
enter values again
rpm is : 920
time is : 18
want to test again?
enter values again

Process finished with exit code 0