как получить значения от пользователя 2-й раз в виджете записи tkinter - PullRequest
0 голосов
/ 11 января 2020

Здесь я пишу код, чтобы дать пользователю другую опцию «mode», после нажатия кнопки режима, мой виджет ввода выскакивает и получает два значения от пользователя для дальнейшей работы. как только пользователь нажмет кнопку «Ввод», мой виджет будет уничтожен. Вот мой код, он успешно принимает значения один раз от пользователя, но когда пользователь дает значения во 2-й раз, он показывает ошибку.

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 ]

1 голос
/ 11 января 2020

Проблема в том, что rpm начинается как StringVar, а затем вы сбрасываете его в строку в этой строке кода:

rpm = rpm.get()

После запуска этой строки кода rpm больше не StringVar. Простое решение заключается в использовании другого имени при извлечении значения:

rpm_value = rpm.get()
0 голосов
/ 11 января 2020

Здесь, после тщательного наблюдения за сообщениями об ошибках ... Я изменил строку кода, как Брайан предложил

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...