@NiklausVarm
Слабый ноут. Xubuntu. Иногда и сам подлагиваю...

Почему обьект app не определяется когда я сослался на него в классе Menu?

Не могу понять почему ошибки в коде на строках 12 и 35. Мне кажется что на 6-й не ошибка, а следствие других действий, которые я выполнил позже. Остается только 2 строки. И думаю что на 35, но что не так?

cerberus@typhon:~/work$ python3 main.py
Traceback (most recent call last):
​ File "main.py", line 35, in
​ ​ ​ app = App()
​ File "main.py", line 6, in __init__
​ ​ ​ self.initialization() #
​ File "main.py", line 12, in initialization
​ ​ ​ pop_menu = tk.Menu(app)
NameError: name 'app' is not defined

А вот и сам код:

import tkinter as tk

class App(tk.Tk):
​ ​ ​ ​ def __init__(self):
​ ​ ​ ​ ​ ​ ​ super().__init__()
​ ​ ​ ​ ​ ​ ​ self.initialization() #

​ ​ ​ ​ def initialization(self):
​ ​ ​ ​ ​ ​ ​ btn1 = tk.Button(text="Finish", command=self.btn_exit)
​ ​ ​ ​ ​ ​ ​ btn1.pack(padx=20, pady=20)

​ ​ ​ ​ ​ ​ ​ pop_menu = tk.Menu(app)
​ ​ ​ ​ ​ ​ ​ app.config(menu=pop_menu)

​ ​ ​ ​ ​ ​ ​ file_menu = tk.Menu(pop_menu, tearoff=0)
​ ​ ​ ​ ​ ​ ​ file_menu.add_command(label="Open file\tCtrl+O")
​ ​ ​ ​ ​ ​ ​ file_menu.add_command(label="Start testing\tCtrl+T")
​ ​ ​ ​ ​ ​ ​ file_menu.add_command(label="Save logs\tCtrl+S")
​ ​ ​ ​ ​ ​ ​ help_menu.add_command(label="Exit")

​ ​ ​ ​ ​ ​ ​ help_menu = tk.Menu(pop_menu, tearoff=0)
​ ​ ​ ​ ​ ​ ​ help_menu.add_command(label="Documentation")
​ ​ ​ ​ ​ ​ ​ help_menu.add_command(label="Changelogs")
​ ​ ​ ​ ​ ​ ​ help_menu.add_command(label="Credits")

​ ​ ​ ​ ​ ​ ​ pop_menu.add_cascade(label="File", menu=file_menu)
​ ​ ​ ​ ​ ​ ​ pop_menu.add_cascade(label="Help", menu=help_menu)

​ ​ ​
​ ​ ​ ​ def btn_exit(self):
​ ​ ​ ​ ​ ​ ​ quit()


if __name__ == "__main__":
​ ​ ​ app = App()
​ ​ ​ app["bg"] = "pink"
​ ​ ​ #app.iconbitmap("@/home/cerberus/work/dagger.xbm")
​ ​ ​ version = 0.6
​ ​ ​ app.title("Vine crasher v{}".format(version))

​ ​ ​ w = app.winfo_screenmmwidth()
​ ​ ​ h = app.winfo_screenmmheight()
​ ​ ​ w = w // 2
​ ​ ​ h = h // 2
​ ​ ​ app.geometry("600x400+{}+{}".format(w, h))
​ ​ ​ app.resizable(False, False)

​ ​ ​ app.mainloop()

Уверен что решение простое, просто я банально его не вижу.
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
pop_menu = tk.Menu(self)
Вам стоит почитать про области видимости.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы