您尚未登录。

#1 2023-03-22 17:18:13

jackphil
会员
注册时间: 2020-10-13
帖子: 92

如何限制 Text 控件的数据大小

python 程序,我用 subprocess 调用一个外部程序,将这个外部程序的标准输出重定向到 tkinter.Text ,这个外部程序类似一个 web 服务器,会一直运行,并持续输出,会不会造成 Text 控件内容太多而崩溃?该如何处理?比如说只保留最新的一千行输出

求教,谢谢

离线

#2 2023-03-23 12:46:44

jackphil
会员
注册时间: 2020-10-13
帖子: 92

Re: 如何限制 Text 控件的数据大小

整了以下代码,可以跑,大佬给点建议

import sys
import time
from multiprocessing import Process
from queue import Queue
from threading import Thread
from tkinter import *

def update_text(text_widget, queue):
    while True:
        text_widget.insert(END, queue.get())
        if  int(text_widget.index('end-1c').split('.')[0]) > 10:
            text_widget.delete('1.0', '2.0')

        time.sleep(0.5)

def genlines(q):
    sys.stdout = q
    for i in range(30):
        print(f'Line {i}')
        #time.sleep(1)

class StdoutQueue(Queue):
    def __init__(self,maxsize=0):
        return Queue.__init__(self, maxsize=0)

    def write(self, msg):
        self.put(msg)

    def flush(self):
        sys.__stdout__.flush()


if __name__ == '__main__':
    root = Tk()
    mytxt = Text(root)
    mytxt.pack()

    q = StdoutQueue()

    mybtn = Button(
        root,
        text='Test',
        command=lambda:genlines(q))
    mybtn.pack()

    text_monitor = Thread(target=update_text, args=(mytxt, q))
    text_monitor.daemon = True
    text_monitor.start()

    root.mainloop()

最近编辑记录 jackphil (2023-03-23 12:49:24)

离线

页脚