[python-win32] (no subject)
Alex Denham
a1eio at hotmail.com
Tue Apr 29 11:42:54 CEST 2008
Thanks mike, i was thinking of doing something along those lines using the os modules tmpfile() method.
Althought i'm pretty i can post custom events to the Tkinter event loop, will try that first.
Thanks
> Date: Mon, 28 Apr 2008 08:33:50 -0500
> From: mdriscoll at co.marshall.ia.us
> To: a1eio at hotmail.com; python-win32 at python.org
> Subject: Re: [python-win32] (no subject)
>
> Alex Denham wrote:
> > Hi all,
> >
> > I'm just wondering but when i try to access/update anything on my
> > Tkinter GUI from one particular function, my whole program
> > crashes/freezes with no error.
> >
> > The function is part of a class which handles all the GUI
> > drawing/event handling etc.
> > The function in question gets called from a win32 DesignatedWrapPolicy
> > class. Sample code below:
> >
> > [code]
> > # this function is part of an IDropTarget class, the TargetWidget
> > was definined in the __init__ method of this functoin and it points to
> > my class which handles the GUI.
> > def Drop(self, data_object, key_state, point, effect):
> > data = data_object.GetData((15, None, 1, -1, 1))
> > print data
> > n_files = shell.DragQueryFileW(data.data_handle, -1)
> > print n_files
> > filenames = [shell.DragQueryFileW(data.data_handle, n_file)
> > for n_file in range(n_files)]
> > print filenames
> > self.TargetWidget.filesDropped(filenames) # this calls the
> > filesDropped function of the TargetWidget class and passes the
> > filename list to it.
> >
> > # this function is part of the GUI class (which inherits from
> > Tkinter.Toplevel) the print commands work however if i uncomment the
> > clearInput function (which just calls self.filepathInput.delete(0,
> > END) to clear the text)
> > # the program hangs, same for the second commented line, and
> > anything else that requires a call to tk it appears. Is there some
> > sort of conflict going on between win32 and Tk ??
> > def filesDropped(self, fileList):
> > print fileList
> > # self.clearInput()
> > # self.filepathInput.insert(Tkinter.END, fileList[0])
> > [/code]
> >
> > I'm just wondering if there's something i need to do to 'release' the GUI?
> > I'm pretty sure it's got nothing to do with my code elsewhere because
> > it was all working smoothly before, and if i call the filesDropped
> > function from somewhere else (not from the IDropTarget class) i don't
> > have any issues.
> >
> > Thanks in advance,
> > Alex
> This is just a guess, but you usually cannot update a GUI from an
> outside process directly. At least, this is true of wxPython. I think
> your blocking the idle event in Tkinter, which causes it to hang and
> then when you try to update it, Tkinter crashes because you're making a
> call on it from what amounts to a separate thread.
>
> Instead, you ought to write to a file or post an event when the win32
> part is finished that the Tkinter GUI can check periodically and then
> react. In other words, have the win32 portion of your code write
> something to a file and have Tkinter check the file every few seconds
> and then update itself when it finds something in there.
>
> In wxPython there is a way to subscribe to special events using the
> PubSub module. Tkinter probably has its own nomenclature. If you can't
> figure it out, I'd recommend the Tkinter mailing list.
>
> Mike
_________________________________________________________________
Be a superhero and win! Play the Iron Man Mashup Game
http://www.ironmanmashup.co.uk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-win32/attachments/20080429/d90bb1cc/attachment-0001.htm>
More information about the python-win32
mailing list