Hi all, I'm using Python 2.7.2 on Windows 7 and a module I've written is acting strangely. I can reproduce the behaviour in question with the following:

--- begin bugtest.py ---

import threading, Tkinter, os, pickle

class savethread(threading.Thread):
    def __init__(self, value):
        threading.Thread.__init__(self)
        self.value = value
    def run(self):
        print 'Saving:',
        with open(os.path.join(os.getcwd(), 'bugfile'), 'wb') as f:
            pickle.dump(self.value, f)
        print 'saved'

class myclass(object):
    def gui(self):
        root = Tkinter.Tk()
        root.grid()
        def save(event):
            savethread(self).start()
        root.bind('s', save)
        root.wait_window()

m = myclass()
m.gui()

--- end bugtest.py ---


Here's the problem: suppose I fire up Python and type

>>> import bugtest

and then click on the Tk window that spawns and press 's'. Then 'Saving:' gets printed, and an empty file named 'bugfile' appears in my current working directory. But nothing else happens until I close the Tk window; as soon as I do so the file is written to and 'saved' gets printed. If I subsequently type

>>> bugtest.m.gui()

and then click on the resulting window and press 's', then 'Saving: saved' gets printed and the file is written to immediately, exactly as I would expect. Similarly if I remove the call to m.gui from the module and just call it myself after importing then it all works fine. But it seems as if calling the gui within the module itself somehow stops savethread(self).run from finishing its job while the gui is still alive.

Can anyone help?


--
Hate music? Then you'll hate this:

http://tinyurl.com/psymix
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to