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

Я пишу программу для создания виджета ввода после нажатия определенной кнопки «режим», затем принял ввод от пользователя и хочу уничтожить этот виджет ввода после того, как пользователь нажал кнопку «ввод». Я новичок в python, поэтому не могу понять ошибку. помогите пожалуйста найти проблему по моему коду

import tkinter as tk
import time
root=tk.Tk()
root.geometry("600x600")
root.title("User Interface Monitor")
rpm=tk.StringVar(root)
tim=tk.StringVar(root)
def  enter():
    global rpm,tim
    root.rpmLabel=tk.Label(root,text="enter rpm value:").grid(row=0)
    root.timeLabel=tk.Label(root,text="enter time in sec").grid(row=1)
    root.e1 = tk.Entry(root,textvariable=rpm).grid(row=0,column=1)
    root.e2 = tk.Entry(root,textvariable=tim).grid(row=1,column=1)
    #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.e1.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()

это мой код. Я успешно принял входные данные от пользователя и передал в основную программу, но не смог уничтожить виджет ввода. вот мои ошибки

11
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 23, in gett
    root.e1.destroy()
AttributeError: 'NoneType' object has no attribute 'destroy'

1 Ответ

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

На самом деле проблема в этих строках

root.e1 = tk.Entry(root,textvariable=rpm).grid(row=0,column=1)
root.e2 = tk.Entry(root,textvariable=tim).grid(row=1,column=1)

Метод сетки возвращает None, поэтому после вызова метода уничтожения для переменной, которая имеет значение None.

Вместо этого вы хотите присвоить запись переменной и после сетки.

root.e1 = tk.Entry(root, textvariable=rpm)
root.e1.grid(row=0, column=1)
root.e2 = tk.Entry(root, textvariable=tim)
root.e2.grid(row=1, column=1)

Как это работает.

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