Я создаю простой графический интерфейс с использованием python и tkinter, это проблема Magic 8 Ball. Моя проблема возникает, когда я пытаюсь обновить текст, который отображается надписью ответа внутри функции ASK. Я хотел попробовать обновить его несколько раз, чтобы он мигал между --- и "[Пробел]" в течение нескольких секунд, прежде чем дать ответ. Но кажется, что он просто накладывается поверх нового текста поверх старого текста до тех пор, пока не будет завершена функция ASK, когда останется только последний текст, который будет добавлен.
Это просто потому, что я могу обновить только один раз внутри функции? Или есть простой способ обойти это?
Код, вырежьте столько, сколько я мог, чтобы показать ошибку:
import time
import random
from tkinter import *
responses=[]
responses.append("No")
responses.append("Yes")
responses.append("I don't think so")
class TheGUI:
def __init__(self, master):
self.master = master
master.title("Python Magic 8 Ball GUI")
self.label = Label(self.master, text="Enter a Question you would like to ask (no to quit):")
self.label.pack()
self.enterplace = Entry(self.master)
self.enterplace.pack()
self.labeltext=StringVar()
self.labeltext.set("--")
self.response = Label(self.master, justify=CENTER, textvariable=self.labeltext)
self.response.pack()
self.frame = Frame(self.master)
self.frame.pack()
self.greet_button = Button(self.frame, text="Ask", command=self.ask)
self.greet_button.pack(side=LEFT)
self.close_button = Button(self.frame, text="Clear", command=self.clear)
self.close_button.pack(side=LEFT)
# This is the function in question
def ask(self):
the_q = self.enterplace.get()
if the_q == "no":
self.labeltext.set("Okay, Goodbye..")
time.sleep(2)
self.master.quit
else:
self.labeltext.set("Let me think for a moment")
self.master.update_idletasks()
time.sleep(2)
# Here, when I update the label to be ---, the previous text
# remains as a background, and only disappears once this
# function has exited. I was initially trying to make the ---
# blink once or twice, but ran into this error
self.labeltext.set("---")
self.master.update_idletasks()
time.sleep(2)
self.labeltext.set(random.choice(responses))
self.master.update_idletasks()
time.sleep(2)
def clear(self):
self.labeltext.set("")
self.master.update_idletasks()
root = Tk()
my_gui = TheGUI(root)
root.mainloop()
На следующем рисунке показано наложение текста: «Дайте мне подумать немного» и «Я так не думаю»
![enter image description here](https://i.stack.imgur.com/EYW0U.jpg)