Python Forum

Full Version: Is mainloop() necessary?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Henlo,
I'm a noob to Python and Tkinter, learning things, Using Python 3.7.4 in a Windows PC, using default IDLE for programming. This is a simple test program for example to my question.

-----------------------
#Example-1
from tkinter import *

def printer(event):
    print('Printing')

root = Tk()

frame1 = Frame(root)
frame1.pack()

button1 = Button(root, text='Button', command=printer)
button1.pack()

root.mainloop()
------------------------

question on Example-1:

If I keep or remove root.mainloop() results will be same, program will run indefinitely. If I keep, it will run without a >>> in the interactive shell of IDLE and on closing the window manually, >>> comes back. If I run it without .mainloop(), >>> comes immediately. On manual closing it another >>> comes on the shell. Button works all the time, until I close it manually. Not only Example-1, all programs works without .mainloop(). If I try to exit any program using a custom exit button/menu item, command line functions cease to respond but window remains open with all widgets on it. Same thing happens when I double click on .py file and let it run on windows command prompt. Is it normal? or a bug? or I'm doing something wrong?
IDLE is written in tkinter, running tkinter code in IDLE will use idle's mainloop.
Best advice is not to use IDLE for tkinter code.

Edit: yes mainloop is necessary.
(Sep-01-2019, 02:35 PM)Yoriz Wrote: [ -> ]IDLE is written in tkinter, running tkinter code in IDLE will use idle's mainloop.
Best advice is not to use IDLE for tkinter code.

Edit: yes mainloop is necessary.

Thank you .....
Thank you .....
Thank you .....
Thank you .....
Thank you .....
Dance

Thank you for arranging my first post and sending 'How To Arrange' link.....

Thank you for solving the problem .....

It worked!

I hadn't any idea that IDLE is written in tkinter and codes are using it's mainloop().

Thanks Man!