Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #50824

Re: tkinter redraw rates

X-Received by 10.224.37.3 with SMTP id v3mr13442829qad.2.1374122281345; Wed, 17 Jul 2013 21:38:01 -0700 (PDT)
X-Received by 10.50.4.99 with SMTP id j3mr1472937igj.6.1374122281259; Wed, 17 Jul 2013 21:38:01 -0700 (PDT)
Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!t19no2043594qam.0!news-out.google.com!dk8ni470qab.0!nntp.google.com!t19no2043592qam.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups comp.lang.python
Date Wed, 17 Jul 2013 21:38:00 -0700 (PDT)
In-Reply-To <mailman.4818.1374109662.3114.python-list@python.org>
Complaints-To groups-abuse@google.com
Injection-Info glegroupsg2000goo.googlegroups.com; posting-host=192.122.131.10; posting-account=5OIV4woAAACjbpJs0VHG7-fH23f_Wd3T
NNTP-Posting-Host 192.122.131.10
References <b80dcc82-7fdb-4213-bec0-5e704483ce28@googlegroups.com> <mailman.4794.1374025243.3114.python-list@python.org> <17c2ef71-ee2d-4229-9731-e0d54a0997cb@googlegroups.com> <mailman.4795.1374027719.3114.python-list@python.org> <a3e5a3bc-248b-4f87-b161-596c6fe77fba@googlegroups.com> <mailman.4799.1374055664.3114.python-list@python.org> <ca274116-be7a-4eda-8e96-a47dd80966c1@googlegroups.com> <mailman.4801.1374061383.3114.python-list@python.org> <f564a889-99f0-4e9c-841f-830356743252@googlegroups.com> <mailman.4805.1374082807.3114.python-list@python.org> <78c6218b-2da8-41a0-9eb3-5432093b3f6b@googlegroups.com> <mailman.4818.1374109662.3114.python-list@python.org>
User-Agent G2/1.0
MIME-Version 1.0
Message-ID <5dd8666d-abc1-41e7-9050-a9b95fbe1e16@googlegroups.com> (permalink)
Subject Re: tkinter redraw rates
From fronagzen@gmail.com
Injection-Date Thu, 18 Jul 2013 04:38:01 +0000
Content-Type text/plain; charset=ISO-8859-1
Content-Transfer-Encoding quoted-printable
Xref csiph.com comp.lang.python:50824

Show key headers only | View raw


On Thursday, July 18, 2013 9:07:24 AM UTC+8, Dave Angel wrote:
> On 07/17/2013 08:44 PM, fronagzen@gmail.com wrote:
> > On Thursday, July 18, 2013 1:38:34 AM UTC+8, Dave Angel wrote:
> >> On 07/17/2013 09:18 AM, fronagzen@gmail.com wrote:
> >>> On Wednesday, July 17, 2013 7:42:45 PM UTC+8, Dave Angel wrote:
> >>>> On 07/17/2013 07:10 AM, fronagzen@gmail.com wrote:
> >>>>> On Wednesday, July 17, 2013 6:07:22 PM UTC+8, Dave Angel wrote:
> >>>>>> On 07/16/2013 11:04 PM, fronagzen@gmail.com wrote:
> >>>>>>> Noted on the quoting thing.
> >>>>>>> Regarding the threading, well, first, I'm not so much a programmer as someone who knows a bit of how to program.
> >>>>>>> And it seems that the only way to update a tkinter window is to use the .update() method, which is what I was experimenting with. Start up a new thread that just loops the .update() with a 1ms sleep until the download is done. It seems to work, actually.
> >>>>>> update() is to be used when it's too awkward to return to mainloop.  In
> >>>>>> my second approach, you would periodically call it inside the processing
> >>>>>> loop.  But unless tkinter is unique among GUI's, it's unsafe to do that
> >>>>>> in any thread besides the GUI thread.
> >>>>>> DaveA
> >>>>> Yes, based on advice from this thread, I'm doing that. From my main thread, I create a thread that handles the download while updating a variable that the mainloop displays as a text output, and in that mainloop, I have a while loop that updates the GUI until the downloading is done.
> >>>> I can't figure out what you're really doing, since each message from you
> >>>> says something different.  You don't need a separate while loop, since
> >>>> that's exactly what app.mainloop() is.
> >>>> --
> >>>> DaveA
> 
> >>> Hm. My apologies for not being very clear. What I'm doing is this:
> >>>           self.loader_thread = Thread(target=self.loadpages,
> >>>                                       name="loader_thread")
> >>>           self.loader_thread.start()
> >>>           while self.loader_thread.isAlive():
> >>>               self.root_window.update()
> >>>               sleep(0.05)
> >>> Where loadpages is a function defined elsewhere.
>
> >> Presumably this fragment is from a method of some class you've written.
> >>    Is it an event handler, or is this happening before you finish setting
> >> up the GUI?  Somewhere at top-level, you're supposed to fall into a call
> >> to mainloop(), which doesn't return till the user cancels the app.
> >> --
> >> DaveA
> 
> > This is, indeed, an event handler from a class for my GUI. My entire GUI is a bit large, so I'll not copy the entire thing here, but it roughly goes:
> > class GUI(object):
> >      def __init__(self):
> >          [stuff]
> >      def init_button(self):
> >          self.execute = ttk.Button(self.input_frame, text='Tally',
> >                                    command=self.execute_now)
> >          self.execute.grid(column=1, row=2, sticky=(N, S, E, W), columnspan=4)
> >      def execute_now(self):
> >          [stuff]
> >          self.loader_thread = Thread(target=self.loadpages,
> >                                      name="loader_thread")
> >          self.loader_thread.start()
>             self.root_window.after(100, self.test_thread)
>             return
> >          while self.loader_thread.isAlive():
> >              self.root_window.update()
> Nope - don't use that.  Instead, post an event on the queue, and return 
> to the mainloop() from whence we came.
>          def test_thread(self):
>             if self.loader_thread.isAlive():
>                 self.root_window.after(100, self.test_thread)
>                 return
>             [morestuff]
> >              sleep(0.05)
> >          [morestuff]
> > if __name__ == "__main__":
> >      APP = GUI()
> >      APP.root_window.mainloop()
> I probably don't have it quite right, but hopefully you'll get the idea. 
>   self.test_thread() is now a new event that will get repeatedly 
> invoked, to do the check on the thread status.  It returns rapidly 
> unless the condition has occurred.
> There are other things that should be done, like blocking the specific 
> events that would create duplicate threads.
> -- 
> 
> DaveA

I see, though it should be noted that your method doesn't actually block the rest of the even handler code from running, had to fiddle with it a bit to get that to work. May I ask what exactly is the rationale behind implementing it like this, though?

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

tkinter redraw rates fronagzen@gmail.com - 2013-07-16 17:57 -0700
  Re: tkinter redraw rates David Hutto <dwightdhutto@gmail.com> - 2013-07-16 21:32 -0400
  Re: tkinter redraw rates David Hutto <dwightdhutto@gmail.com> - 2013-07-16 21:34 -0400
  Re: tkinter redraw rates Dave Angel <davea@davea.name> - 2013-07-16 21:40 -0400
    Re: tkinter redraw rates fronagzen@gmail.com - 2013-07-16 18:51 -0700
      Re: tkinter redraw rates Dave Angel <davea@davea.name> - 2013-07-16 22:21 -0400
        Re: tkinter redraw rates fronagzen@gmail.com - 2013-07-16 20:04 -0700
          Re: tkinter redraw rates Dave Angel <davea@davea.name> - 2013-07-17 06:07 -0400
            Re: tkinter redraw rates fronagzen@gmail.com - 2013-07-17 04:08 -0700
              Re: tkinter redraw rates Michael Torrie <torriem@gmail.com> - 2013-07-17 16:53 -0600
            Re: tkinter redraw rates fronagzen@gmail.com - 2013-07-17 04:10 -0700
              Re: tkinter redraw rates Dave Angel <davea@davea.name> - 2013-07-17 07:42 -0400
                Re: tkinter redraw rates fronagzen@gmail.com - 2013-07-17 06:18 -0700
                Re: tkinter redraw rates Dave Angel <davea@davea.name> - 2013-07-17 13:38 -0400
                Re: tkinter redraw rates fronagzen@gmail.com - 2013-07-17 17:44 -0700
                Re: tkinter redraw rates Dave Angel <davea@davea.name> - 2013-07-17 21:07 -0400
                Re: tkinter redraw rates fronagzen@gmail.com - 2013-07-17 21:38 -0700
                Re: tkinter redraw rates Dave Angel <davea@davea.name> - 2013-07-18 00:52 -0400
                Re: tkinter redraw rates Christian Gollwitzer <auriocus@gmx.de> - 2013-07-18 09:20 +0200
                Re: tkinter redraw rates fronagzen@gmail.com - 2013-07-18 02:10 -0700
                Re: tkinter redraw rates Peter Otten <__peter__@web.de> - 2013-07-17 20:10 +0200

csiph-web