我遇到了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很新,所以任何帮助都表示赞赏。