Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 23390

Python tkinter root close

$
0
0

As an interim to my full application, I'm closing the window with buttons at different places in the file. Now originally, it works fine: I can close the application from both location within the file. However, I'm trying to clean the code up and have a better style.

Here's the code I have (with the better style):

from tkinter import *from tkinter import ttkclass Location:    def __init__(self, root):        root.title("Location")        root.geometry('400x295')          self.mainframe = ttk.Frame(root, padding="3 3 12 12")        self.mainframe.grid(column = 0, row=0, sticky=(N, W, E, S))        root.columnconfigure(0, weight=1)        root.rowconfigure(0, weight=1)        confirm_button = ttk.Button(self.mainframe, text = 'CONFIRM', command = self.make_confirmation)        confirm_button.grid(column=0, row=0)        select_button = ttk.Button(self.mainframe, text = 'Geometry', command = root.quit)        select_button.grid(column=0, row=1)      def make_confirmation(self, *args):        root.quit()def main_app():    root = Tk()    Location(root)    root.mainloop()  if __name__ == "__main__":    main_app()

The "Geometry" button will close just fine.

The "Confirm" button gives me a NameError.

Note, def make_confirmation is in class Location

Traceback (most recent call last):  File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 1948, in __call__    return self.func(*args)           ^^^^^^^^^^^^^^^^  File "c:\Users\User\Documents\Python\Tutorials\Quit_wStyle.py", line 22, in make_confirmation    root.quit()    ^^^^NameError: name 'root' is not defined

In my non-MWE, make.confirmation does a bit more and has arguments passed through. That all works fine. I know that because when I get rid of def main_app(): and put it all in if __name__ == "__main__":, then both root.quit works.

In other words, this works:

from tkinter import *from tkinter import ttkclass Location:    def __init__(self, root):        root.title("Location")        root.geometry('400x295')          self.mainframe = ttk.Frame(root, padding="3 3 12 12")        self.mainframe.grid(column = 0, row=0, sticky=(N, W, E, S))        root.columnconfigure(0, weight=1)        root.rowconfigure(0, weight=1)        confirm_button = ttk.Button(self.mainframe, text = 'CONFIRM', command = self.make_confirmation)        confirm_button.grid(column=0, row=0)        select_button = ttk.Button(self.mainframe, text = 'Geometry', command = root.quit)        select_button.grid(column=0, row=1)      def make_confirmation(self, *args):        root.quit()if __name__ == "__main__":    main_app()    root = Tk()    Location(root)    root.mainloop()  

Why is command = root.quit working?

But command = self.make_confirmation does work?


Viewing all articles
Browse latest Browse all 23390

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>