Re: 2.7.9: PhotoImage get/put
In article , tjre...@udel.edu says... [snip] > > I made my 'root' Tk instance global, and > > call root.update_idletasks() after the > > .put > I did not see the original post, but the alternative way to animate is > to use root.after(milliseconds, callback, *args) at the end of callbacks > to allow the event loop to process other events before re-calling the > same or another callback. I could see that being useful for creating a steady frame rate in longer animations. I'll put that one in my Python toolbox as well. --- news://freenews.netfront.net/ - complaints: n...@netfront.net --- -- https://mail.python.org/mailman/listinfo/python-list
Re: 2.7.9: PhotoImage get/put
On 10/21/2015 1:50 AM, Randy Day wrote: When I read your post, I realized I'm doing a crude animation. After a bit of searching on 'python canvas animation', I found a reference to how it's done: I made my 'root' Tk instance global, and call root.update_idletasks() after the .put I did not see the original post, but the alternative way to animate is to use root.after(milliseconds, callback, *args) at the end of callbacks to allow the event loop to process other events before re-calling the same or another callback. -- Terry Jan Reedy -- https://mail.python.org/mailman/listinfo/python-list
Re: 2.7.9: PhotoImage get/put
In article , em...@fenx.com says... [snip] > I have no idea why, but here are some ideas I'd try out. > So is it refreshing upon completion of the loop, or upon exit from > process()? It turns out I need to call root.update_idletasks() for my root Tk object to get it to refresh after I put the pixel. It works great now. --- news://freenews.netfront.net/ - complaints: n...@netfront.net --- -- https://mail.python.org/mailman/listinfo/python-list
Re: 2.7.9: PhotoImage get/put
In article , illusiontechniq...@gmail.com says... [snip] > If you want to pass arguments to a command called when a button is > clicked, you have to use 'lambda' in tkinter. Thanks. I just skimmed over lambda before now... > You can't expect a delay to happen during the mainloop() of the > program. To interrupt the mainloop(), use: parent.after(n,someCommand) > Where 'n' is some amount of milliseconds. Just have the parent widget > or the root frame call it. When I read your post, I realized I'm doing a crude animation. After a bit of searching on 'python canvas animation', I found a reference to how it's done: I made my 'root' Tk instance global, and call root.update_idletasks() after the .put It works great! Now back to the lambdas (Ralph the Wonder Lambda, Earl J Lambda, Mike Q Lambda III, et al?). --- news://freenews.netfront.net/ - complaints: n...@netfront.net --- -- https://mail.python.org/mailman/listinfo/python-list
Re: 2.7.9: PhotoImage get/put
>> def process(): # Ordinarily this would be process(photo,wdth,hgt) >>global wdth # but I ran into problems calling it from a button If you want to pass arguments to a command called when a button is clicked, you have to use 'lambda' in tkinter. >>global hgt #command with parameters... >>global photo # the PhotoImage displayed by the calling code >> >> # indents set to 1 to avoid word wrap >> >> # Loop through rows and columns of the image >>v=wdth >>z=0 >>a=-1 >>for y in range (0,hgt): >> w=v >> v=z # swap v and z so rows are scanned l/r r/l l/r >> z=w >> a=-a # set our inc/dec step for lr->rl scan >> >> for x in range(v,z,a): >> pix = photo.get(x,y) if pix == u'0 0 0' : >> #pixel_turn_on() >> photo.put("#%02x%02x%02x" % (255,255,255), (x,y)) >> else: >> #pixel_turn_off() >> photo.put("#%02x%02x%02x" % (0,0,0), (x,y)) You can't expect a delay to happen during the mainloop() of the program. To interrupt the mainloop(), use: parent.after(n,someCommand) Where 'n' is some amount of milliseconds. Just have the parent widget or the root frame call it. -- https://mail.python.org/mailman/listinfo/python-list
Re: 2.7.9: PhotoImage get/put
On 10/20/2015 3:05 PM, Randy Day wrote: I'm writing a simple image manipulation on a PhotoImage (tkinter), and running into an odd problem. The code below works, except for one thing: As the image is scanned, I'd like to observe the pixels getting inverted on the image (as a kind of progress bar). What happens is that the code runs the complete loop before refreshing the photo. I have no idea why, but here are some ideas I'd try out. So is it refreshing upon completion of the loop, or upon exit from process()? What happens if you put an outer loop around yours to process hght in ten (pick a number) steps? Emile I've tried various forms of refresh(), update(), etc., within the loop, but so far no luck. Am I missing something simple? def process(): # Ordinarily this would be process(photo,wdth,hgt) global wdth # but I ran into problems calling it from a button global hgt #command with parameters... global photo # the PhotoImage displayed by the calling code # indents set to 1 to avoid word wrap # Loop through rows and columns of the image v=wdth z=0 a=-1 for y in range (0,hgt): w=v v=z # swap v and z so rows are scanned l/r r/l l/r z=w a=-a # set our inc/dec step for lr->rl scan for x in range(v,z,a): pix = photo.get(x,y) if pix == u'0 0 0' : #pixel_turn_on() photo.put("#%02x%02x%02x" % (255,255,255), (x,y)) else: #pixel_turn_off() photo.put("#%02x%02x%02x" % (0,0,0), (x,y)) --- news://freenews.netfront.net/ - complaints: n...@netfront.net --- -- https://mail.python.org/mailman/listinfo/python-list
2.7.9: PhotoImage get/put
I'm writing a simple image manipulation on a PhotoImage (tkinter), and running into an odd problem. The code below works, except for one thing: As the image is scanned, I'd like to observe the pixels getting inverted on the image (as a kind of progress bar). What happens is that the code runs the complete loop before refreshing the photo. I've tried various forms of refresh(), update(), etc., within the loop, but so far no luck. Am I missing something simple? def process(): # Ordinarily this would be process(photo,wdth,hgt) global wdth # but I ran into problems calling it from a button global hgt #command with parameters... global photo # the PhotoImage displayed by the calling code # indents set to 1 to avoid word wrap # Loop through rows and columns of the image v=wdth z=0 a=-1 for y in range (0,hgt): w=v v=z # swap v and z so rows are scanned l/r r/l l/r z=w a=-a # set our inc/dec step for lr->rl scan for x in range(v,z,a): pix = photo.get(x,y) if pix == u'0 0 0' : #pixel_turn_on() photo.put("#%02x%02x%02x" % (255,255,255), (x,y)) else: #pixel_turn_off() photo.put("#%02x%02x%02x" % (0,0,0), (x,y)) --- news://freenews.netfront.net/ - complaints: n...@netfront.net --- -- https://mail.python.org/mailman/listinfo/python-list