Почему я не могу удалить этот ярлык (Tkinter) - PullRequest
0 голосов
/ 03 декабря 2018

Я просто бездельничаю и тестирую вещи на python.Для одной части моего доказательства концепции кода для большого проекта мне нужно создать, а затем удалить метки.К сожалению, после того, как я создал ярлык и затем попытался удалить его, я получаю эту ошибку, когда я пытаюсь .destory() ярлыки:

AttributeError: 'NoneType' object has no attribute 'destroy'

Я слышал, что вы можете получить эту ошибкуесли на вашем ярлыке ничего нет, значит «Нет», а на моем - текст.Вот код:

from tkinter import*
import random
import time

root = Tk()
root.geometry("800x500")
root.title("amazing")

def one():
    label1 = Label(root, text="one", font=("Comic Sans MS", 30),  fg="purple").pack()
    time.sleep(2)
    label1.destroy()

def two():
    label2 = Label(root, text="two", font=("Comic Sans MS", 30),  fg="purple").pack()
    time.sleep(2)
    label2.destroy()

def doit():
    rchoice = [two, one]
    selected = random.choice(rchoice)
    return selected()

Button = Button(root, text="Button", width=15, height=3, font=("Comic Sans MS", 20), fg="blue", bg="lightgreen", command=doit).pack(pady=50)

root.mainloop()

1 Ответ

0 голосов
/ 03 декабря 2018

Есть несколько проблем с вашим кодом.

  1. Если вы попытаетесь напечатать значение меток, вы поймете, что на самом деле это None.Это потому, что вы использовали метод pack() сразу после того, как определили виджет, а pack() возвращает None.Поэтому вам нужно их разделить.

  2. Воздержитесь от использования sleep() в tkinter.Это заморозит ваш основной цикл.Способ сделать это - использовать after().

Вот рабочий код.

from tkinter import *
import random

root = Tk()
root.geometry("800x500")
root.title("amazing")

def one():
    label1 = Label(root, text="one", font=("Comic Sans MS", 30),  fg="purple")
    label1.pack()
    label1.after(2000, label1.destroy)

def two():
    label2 = Label(root, text="two", font=("Comic Sans MS", 30),  fg="purple")
    label2.pack()
    label2.after(2000, label2.destroy)

def doit():
    rchoice = [two, one]
    selected = random.choice(rchoice)
    return selected()

Button(root, text="Button", width=15, height=3, font=("Comic Sans MS", 20), fg="blue", bg="lightgreen", command=doit).pack(pady=50)

root.mainloop()
...