Как получить предыдущее значение из 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()