Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Help understand loops
#4
(Nov-27-2019, 04:43 AM)tonycstech Wrote: Is this loop specifically for tkinter module and it will run independent from the rest of the code ?
All GUI or web-app(server) has some kind of main loop that run continuous.
If think of it so are these application something that you don't want to stop,before you push eg a stop button.

tonycstech Wrote:is this main loop that runs independent of any modules that are currently running ?
No,if you make loop or something that interfere with the main loop GUI is running it will freeze GUI.
Here a example from doc,i have put in time.sleep this will freeze GUI main loop for 10-sec.
A normal way is to have a quit button as here that break GUI main loop.
import tkinter as tk
import time

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)
        self.quit.pack(side="bottom")

    def say_hi(self):
        time.sleep(10)
        print("hi there, everyone!")        

root = tk.Tk()
app = Application(master=root)
app.mainloop()
Usually all GUI's has some kind of methods build in for Threading(Multithreading).
A very common mistake that many makes with GUI is to freeze the main loop not thinking of this.
Tkinter has eg after.
Example here dos it print hello world every 10-sec,but it dos not freeze GUI as i showed with time.sleep.
import tkinter as tk

class Foo(tk.Tk):
    def __init__(self):
        super().__init__()
        self.callId = None
        self.button = tk.Button(self, text="Stop", command=self.stop)
        self.button.pack()

    def periodically_speak(self):
        print("Hello world!")
        self.callId = self.after(10000, self.periodically_speak)

    def stop(self):
        if self.callId is not None:
            self.after_cancel(self.callId)

foo = Foo()
foo.periodically_speak()
Reply


Messages In This Thread
Help understand loops - by tonycstech - Nov-27-2019, 04:43 AM
RE: Help understand loops - by Malt - Nov-27-2019, 05:06 AM
RE: Help understand loops - by tonycstech - Nov-27-2019, 05:33 AM
RE: Help understand loops - by snippsat - Nov-27-2019, 06:04 AM
RE: Help understand loops - by buran - Nov-27-2019, 06:16 AM
RE: Help understand loops - by tonycstech - Nov-27-2019, 07:10 AM
RE: Help understand loops - by buran - Nov-27-2019, 07:16 AM
RE: Help understand loops - by tonycstech - Nov-27-2019, 08:43 AM
RE: Help understand loops - by snippsat - Nov-27-2019, 01:32 PM
RE: Help understand loops - by tonycstech - Nov-30-2019, 06:21 AM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020