Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Python: Python
Problems with using queue in Tkinter application
 

Index | Next | Previous | View Flat


asm198 at gmail

Jul 3, 2009, 6:14 PM


Views: 233
Permalink
Problems with using queue in Tkinter application

I'm working on a serial protocol analyzer in python. We have an
application written by someone else in MFC but we need something that
is cross platform. I intended to implement the GUI portion in Tkinter
but am having trouble.

The idea is that I will read messages from the serial port and output
them to a Tkinter Text object initially. Eventually it will have
other functionality but that's it for the short term. I've written
this little test app to experiment with putting things on the GUI via
a Queue which is polled by the Tkinter loop.

On some machines this code works fine and I get whatever I type in
displayed in the Text widget. On others I get errors like this as
soon as I start it running.

error in background error handler:
out of stack space (infinite loop?)
while executing
"::tcl::Bgerror {out of stack space (infinite loop?)} {-code 1 -level
0 -errorcode NONE -errorinfo {out of stack space (infinite loop?)
while execu..."


I don't understand why on some machines it works exactly as expected
and on others it acts the same way Tkinter does when I call functions
directly from outside the Tkinter thread. Does anyone have any
suggestions? The full code as appended below. Thanks in advance.

[code]

import Queue

class functionQueue:

def __init__(self, root = None, timeout = 250):

self.functionQueue = Queue.Queue()
self.root = root
self.timeout = timeout

if(self.root):
self.pop_function(root)


def pop_function(self, root = None):

try:
funcArgList = self.functionQueue.get(block = False)
except Queue.Empty:
pass
else:
try:
funcArgList[0](*funcArgList[1])
except:
try:
print "Failed to call function", funcArgList[0]
except:
print "Failed to call function"

if(root):
root.after(self.timeout, lambda: self.pop_function
(self.root))

def add_function(self, function, argList):

try:
self.functionQueue.put([function, argList])
except:
pass


if( __name__ == '__main__'):

import Tkinter
import thread

text = Tkinter.Text()
text.pack()

myQueue = functionQueue(text, 50)

def gui_loop():
try:
text.mainloop()
except:
import os
os._exit(1)

thread.start_new_thread(text.mainloop, ())

while(True):
usrInput = raw_input()

if(usrInput == "-1"):
import os
os._exit(0)

myQueue.add_function(text.insert, ['end', usrInput + "\n"])
myQueue.add_function(text.see, ['end'])

[/code]

--
http://mail.python.org/mailman/listinfo/python-list

Subject User Time
Problems with using queue in Tkinter application asm198 at gmail Jul 3, 2009, 6:14 PM
    Re: Problems with using queue in Tkinter application __peter__ at web Jul 4, 2009, 1:21 AM
        Re: Problems with using queue in Tkinter application asm198 at gmail Jul 4, 2009, 8:23 AM
    Re: Problems with using queue in Tkinter application __peter__ at web Jul 4, 2009, 9:24 AM
        Re: Problems with using queue in Tkinter application asm198 at gmail Jul 5, 2009, 7:56 AM
    Re: Problems with using queue in Tkinter application python at mrabarnett Jul 4, 2009, 9:40 AM

  Index | Next | Previous | View Flat
 
 


Interested in having your list archived? Contact lists@gossamer-threads.com
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.