在Tkinter中按钮命令调用后实时显示文本?

0 投票
2 回答
3091 浏览
提问于 2025-04-17 00:17

我想在Tkinter中显示实时文本,当点击一个按钮时会调用一个函数。这个函数应该在PycURL收到“HTTP/1.1 200 OK”时显示一个“时间戳”。这个函数每两分钟会把能量数据发送到服务器。

一些伪代码、基本示例或者一般讨论应该能让我找到正确的方向。我已经成功地把能量数据发送出去了。现在我需要让图形界面(GUI)正常工作。

谢谢 - Brad

2 个回答

0

你是想在Tkinter中,按下一个按钮后实时显示文本吗?我了解到的情况是,用户按下按钮后,函数开始运行,每两分钟就向服务器发送一些数据,并试图在每次发送后显示一些文本,但遇到了问题。

它是怎么尝试显示文本的?具体问题是什么呢?

(我不太了解PycURL,所以如果这能让一切变得清楚,抱歉我可能无法帮助到你)

1

在马克·卢茨的书《Python编程》中找到了答案。下面的代码是根据书中的内容,结合线程和队列的信息进行调整的!

    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)
            t.insert('0', '%s\n' % str(data))
        t.after(250, 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(0.1, .11)
            time.sleep(delay)
            que.put(' epoch=%f, delay=%f' % (time.time(), delay))

这个方法有效。

撰写回答