I have serial data that can come in at irregular intervals from a hand held barcode scanner. The scanner continuously looks for a barcode (no button or trigger is ever pressed) and when the scanner captures a valid barcode it sends the code to the PC over serial.
What I want to do is have a Tkinter GUI (Windows XP) where the serial codes are passed to the GUI when a barcode is read. What is the best (easy) way to do this?
def __init__(self, master, queue, endCommand):
self.queue = queue
# Set up the GUI
console = Tkinter.Button(master, text='Done', command=endCommand)
# Add more GUI stuff here
Handle all the messages currently in the queue (if any).
msg = self.queue.get(0)
# Check contents of message and do what it says
# As a test, we simply print it
Launch the main part of the GUI and the worker thread. periodicCall and
endApplication could reside in the GUI part, but putting them here
means that you have all the thread controls in a single place.
def __init__(self, master):
Start the GUI and the asynchronous threads. We are in the main
(original) thread of the application, which will later be used by
the GUI. We spawn a new thread for the worker.
self.master = master
# Create the queue
self.queue = Queue.Queue()
# Set up the GUI part
self.gui = GuiPart(master, self.queue, self.endApplication)
# Set up the thread to do asynchronous I/O
# More can be made if necessary
self.running = 1
self.thread1 = threading.Thread(target=self.workerThread1)
# Start the periodic call in the GUI to check if the queue contains
Check every 100 ms if there is something new in the queue.
if not self.running:
# This is the brutal stop of the system. You may want to do
# some cleanup before actually shutting it down.
This is where we handle the asynchronous I/O. For example, it may be
One important thing to remember is that the thread has to yield
# To simulate asynchronous I/O, we create a random number at
# random intervals. Replace the following 2 lines with the real
time.sleep(rand.random() * 0.3)
msg = rand.random()
self.running = 0
rand = random.Random()
root = Tkinter.Tk()
client = ThreadedClient(root)