gpt4 book ai didi

Python Tkinter 更新标签文本会将旧文本保留在那里,直到函数退出

转载 作者:行者123 更新时间:2023-12-01 01:56:18 25 4
gpt4 key购买 nike

我正在使用 python 和 tkinter 构建一个简单的 GUI,这是一个 Magic 8 Ball 问题。当我尝试更新 ASK 函数内响应标签显示的文本时,我的问题出现了。我想尝试更新几次,以便它在给出答案之前在 --- 和“[Blank]”之间闪烁几秒钟。但它似乎只是将新文本覆盖在旧文本之上,直到 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

最佳答案

你几乎一切都对!对我有用的是将 self.master.update_idletasks() 替换为 self.master.update()

        self.labeltext.set("Let me think for a moment")
self.master.update()
# self.master.update_idletasks()
time.sleep(2)

self.labeltext.set("---")
self.master.update()
# self.master.update_idletasks()
time.sleep(2)
self.labeltext.set(random.choice(responses))
self.master.update()
# self.master.update_idletasks()
time.sleep(2)

但是我不明白为什么 update_idletasks() 在这种情况下不起作用......

关于Python Tkinter 更新标签文本会将旧文本保留在那里,直到函数退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50148235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com