gpt4 book ai didi

python - 清除 Tkinter 条目文本 - 所以新文本看起来很新?

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:03 25 4
gpt4 key购买 nike

我想修改下面的代码以在写入新文本之前清除条目文本。基本上我想删除文本,等一秒钟,然后写新文本。这应该给出正在编写的"new"文本的外观。有任何想法吗? TIA - 布拉德

    import thread, Queue, time, random, poster
from Tkinter import *

dataQueue = Queue.Queue()

def status(t):
try:
data = dataQueue.get(block=False)
except Queue.Empty:
pass
else:
t.delete(0, END)
time.sleep(1)
t.insert(0, '%s\n' % str(data))
t.after(2, lambda: status(t))

def makethread():
thread.start_new_thread(poster.poster, (1,dataQueue))

if __name__ == '__main__':
root = Tk()
root.geometry("240x45")
t = Entry(root)
t.pack(side=TOP, fill=X)
Button(root, text='Start Epoch Display',
command=makethread).pack(side=BOTTOM, fill=X)
status(t)
root.mainloop()

在另一个名为 poster 的文件中

    import random, time

def poster(id,que):
while True:
delay=random.uniform(5, 10)
time.sleep(delay)
que.put(' epoch=%f, delay=%f' % (time.time(), delay))

最佳答案

因为可能有很多线程写入队列(每次按下按钮一个线程),所以有点不清楚何时应该删除文本和应该插入新文本。例如,如果文本刚刚写入并且新文本到达,新文本是应该立即写入还是应该添加到队列中以便稍后在时间允许时显示?

您可以设置状态处理程序来处理删除命令和插入命令。这个版本的处理程序在每次插入发送回删除命令后启动一个线程。如果删除命令的 ID 与当前显示的文本的 ID 匹配,则状态处理程序将删除显示:

def status(t, current_id, queue):
try:
data = queue.get(block = False)

# Insert text for ID command:
if type(data) == tuple:
(id, str) = data
t.delete(0, END)
t.insert(0, str)
current_id = id

# Thread that sends a delete command
# after a fixed delay.
make_delete_thread(id, queue)

# Delete text for ID command:
elif data == current_id:
t.delete(0, END)

except Queue.Empty:
pass

t.after(10, lambda: status(t, current_id, queue))

def make_delete_thread(id, queue):
thread.start_new_thread(delete_thread, (id, queue))

def delete_thread(id, queue):
time.sleep(1)
queue.put(id)

关于python - 清除 Tkinter 条目文本 - 所以新文本看起来很新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205394/

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