Как получить предыдущее значение из Queue в Python?

Забираю данные (строки) из очереди с помощью queue.get(). Как записать два предыдущих значения из этой очереди? Например первое значение: J5, а затем F4, как вывести их в таком формате допустимвведите сюда описание изображения в интерфейс?

import tkinter
import time
import threading
import random
import queue



class GuiPart:
    def __init__(self, master, queue, endCommand, thread1):

        self.queue = queue
        button = tkinter.Button(text="Подключить", command=thread1)  # threading.Thread(target=values).start()
        button.pack()


        self.text = tkinter.StringVar()


        entry_2 = tkinter.Entry(root, textvariable=self.text)

        explanation = tkinter.Label(root, text='Т:')
        explanation.pack()

        entry_2.pack()



        print(thread1)
        # Add more GUI stuff here depending on your specific needs
        console = tkinter.Button(master, text='Done', command=endCommand)
        console.pack()

    def processIncoming(self):

        while self.queue.qsize():
            try:
                msg = self.queue.get(0)

                self.text.set(msg)

                print(msg)
            except queue.Empty:

                pass


class ThreadedClient:



    def __init__(self, master):

        self.master = master


        self.queue = queue.Queue()


        self.running = 1
        self.thread1 = threading.Thread(target=self.workerThread1)
        self.thread1.start()
        self.gui = GuiPart(master, self.queue, self.endApplication, self.thread1)


        self.periodicCall()

    def periodicCall(self):

        self.gui.processIncoming()
        if not self.running:
            # This is the brutal stop of the system. You may want to do
            # some cleanup before actually shutting it down.
            import sys
            sys.exit(1)
        self.master.after(200, self.periodicCall)

    def workerThread1(self):

        while self.running:
            time.sleep(rand.random() * 1.5)
            msg = rand.random()
            self.queue.put(msg)

    def endApplication(self):
        self.running = 0

rand = random.Random()
root = tkinter.Tk()
root.title("Магнитометр")
client = ThreadedClient(root)
root.mainloop()

Ответы (1 шт):

Автор решения: dprofe

я реализовал идею, предложенную в комментариях.

self.texts - список из 3-х tkinter.StringVar(). В момент обновления информации вся информация сдвигается на 1 элемент назад. Информация из первого элемента (self.texts[0]) теряется. В последний элемент (self.texts[-1]) записывается новая информация.

import tkinter
import time
import threading
import random
import queue



class GuiPart:
    def __init__(self, master, queue, endCommand, thread1):

        self.queue = queue
        button = tkinter.Button(text="Подключить", command=thread1)  # threading.Thread(target=values).start()
        button.pack()


        self.texts = [tkinter.StringVar(), tkinter.StringVar(), tkinter.StringVar()]

        explanation = tkinter.Label(root, text='Т:')
        explanation.pack()

        for i in self.texts:
            etr = tkinter.Entry(root, textvariable=i)
            etr.pack()


        print(thread1)
        # Add more GUI stuff here depending on your specific needs
        console = tkinter.Button(master, text='Done', command=endCommand)
        console.pack()

    def processIncoming(self):

        while self.queue.qsize():
            try:
                msg = self.queue.get(0)
                for i in range(len(self.texts) - 1):
                    self.texts[i].set(self.texts[i + 1].get())
                self.texts[-1].set(msg)

                print(msg)
            except queue.Empty:
                pass



class ThreadedClient:
    def __init__(self, master):

        self.master = master


        self.queue = queue.Queue()


        self.running = 1
        self.thread1 = threading.Thread(target=self.workerThread1)
        self.thread1.start()
        self.gui = GuiPart(master, self.queue, self.endApplication, self.thread1)


        self.periodicCall()

    def periodicCall(self):

        self.gui.processIncoming()
        if not self.running:
            # This is the brutal stop of the system. You may want to do
            # some cleanup before actually shutting it down.
            import sys
            sys.exit(1)
        self.master.after(200, self.periodicCall)

    def workerThread1(self):

        while self.running:
            time.sleep(rand.random() * 1.5)
            msg = rand.random()
            self.queue.put(msg)

    def endApplication(self):
        self.running = 0

rand = random.Random()
root = tkinter.Tk()
root.title("Магнитометр")
client = ThreadedClient(root)
root.mainloop()
→ Ссылка