Python tkinter文本小部件插入速度减慢

时间:2017-08-24 01:03:54

标签: python text tkinter widget tk

我遇到了tkinter文本小部件的问题。基本上,我正在尝试将输出写入两个不同的文本小部件。随着时间的推移,对框的输出变慢,文本开始在多行输出。

如果你想观察

,我可以在这里运行一些python代码
from tkinter import *
import sys
import time
from threading import Thread
from threading import Timer
from multiprocessing import Process, Queue
import queue
import serial



threadqueue = queue.Queue()
processqueue = Queue()
data = True

class MainGui():

    def __init__(self):
        self.root = Tk()
        self.root.title("Test")
        self.root.geometry("1280x1024")
        self.root["bg"] = "gray55"
        self.o_box()
        self.f_o_data_box()
        self.read_serial()
        self.root.mainloop()


    def o_box(self):
        self.serialbox = Text(self.root,
                          bg="black",
                          fg="white",
                          height=10,
                          width=105)
        self.serialbox.place(x=10, y=780)

    def f_o_data_box(self):
        self.faultdata = Text(self.root,
                          bg="gray93",
                          fg="red",
                          height=61,
                          width=65)
        self.faultdata.place(x=780, y=13)



    def run(self):
        pass



    def update_gui(self):
        self.root.update()


    def read_serial(self):
        try:
            self.serialbox.insert(CURRENT, str(processqueue.get()).encode('ascii'))
            self.faultdata.insert(CURRENT, str(processqueue.get()).encode('ascii'))
            self.serialbox.see("end")
            self.faultdata.see("end")
            self.root.after(10, self.read_serial)
        except queue.Empty:
            self.root.after(100, self.read_serial)






def run():

        ser = serial.Serial()
        while 1:
            processqueue.put(str("Hello").encode('ascii'))
            continue


def main():
    try:

        SerialProcess = Process(target=run)
        SerialProcess.start()

        MainWindow = MainGui();

        MainWindow.run();

        SerialProcess.join()


    except KeyboardInterrupt:
        sys.exit(1)

if __name__ == "__main__":
    main()

我的猜测是,出于某种原因,多个文本框正在彼此之间实例化......因此输出随着时间的推移而减慢并且输出行为变得奇怪。但我无法追查行为的来源。任何人都可以解释为什么会发生这种情况,或者我的问题在哪里?我已经尝试查看tk(),mainloop()的行为,并试图在我的代码中找到我重复调用一个新窗口的实例......其中没有一个我有幸得到了注意。

我对python很新,所以任何帮助都表示赞赏。

0 个答案:

没有答案