Корень Python tkinter закрытьPython

Программы на Python
Anonymous
Корень Python tkinter закрыть

Сообщение Anonymous »

В качестве временного промежутка между полным приложением я закрываю окно с кнопками в разных местах файла. Теперь изначально все работает нормально: я могу закрыть приложение из обоих мест файла. Однако я пытаюсь очистить код и улучшить стиль.
Вот код, который у меня есть (с лучшим стилем):

Код: Выделить всё

from tkinter import *
from tkinter import ttk

class 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()
Кнопка «Геометрия» закроется нормально.
Кнопка «Подтвердить» выдает ошибку NameError.
Обратите внимание: определение make_confirmation находится в классе 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
В моем случае, не использующем MWE, make.confirmation делает немного больше и передает аргументы. Все это работает нормально. Я знаю это, потому что когда я избавляюсь от def main_app(): и помещаю все это в if __name__ == "__main__":, то оба root.quit работают.
Другими словами, это работает:

Код: Выделить всё

from tkinter import *
from tkinter import ttk

class 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()
Почему команда = root.quit работает?
Но команда = self.make_confirmation работает?
Почему команда = root.quit работает? п>

Подробнее здесь: https://stackoverflow.com/questions/785 ... root-close

Вернуться в «Python»