2017-02-01 3 views
0

Я новичок в программировании и пытаюсь создать меню на Python с пакетом Tkinter. Но всякий раз, когда я запускаю сценарий в IDLE, все, что отображается, это окно верхнего уровня (root).Python Tkinter Создание меню не работает

Вот мой сценарий:

from tkinter import * 
from tkinter import ttk 

root.option_add('*tearOff', False) 

menubar1 = Menu(root) 
root.configure(menu = menubar1) 
file = Menu(menubar1) 
edit = Menu(menubar1) 
help_ = Menu(menubar1) 
tools = Menu(menubar1) 
other = Menu(menubar1) 

menubar1.add_cascade(menu = file, label = 'File') 
menubar1.add_cascade(menu = edit, label = 'Edit') 
menubar1.add_cascade(menu = help_, label = 'Help') 
menubar1.add_cascade(menu = tools, label = 'Tools') 
menubar1.add_cascade(menu = other, label = 'Other') 

Любая идея, почему?

Заранее благодарен.

+3

Код, который вы отправили, даже не запускался, так как в нем отсутствует экземпляр 'tkinter.Tk' (вероятно, сохраненный в' root') и 'root.mainloop'. Если я добавлю эти части, это будет хорошо для меня. – TidB

+0

Ответ настолько мал, что он должен даже получить определенный ответ только в комментарии – WhatsThePoint

+0

, вы попробовали запустить его без IDLE? IDLE был создан с помощью 'tkinter', поэтому иногда может быть конфликт. Но IDLE - это только инструмент для разработки кода, и когда код готов, вы не используете IDLE для его запуска. – furas

ответ

1

Как отмечалось в комментариях, удивительно, что ваш код работал вообще: root не определен, прежде чем пытаться использовать на нем option_add, поэтому он запустит NameError: name 'root' is not defined.

Но это будет Работайте, если вы его определяете. Кто-то уже прокомментировал это решение. Экземпляр tkinter.Tk - это то, как вы определяете свой корень для создания окна в первую очередь. mainloop() - это то, что вы делаете, чтобы поддерживать это окно. Это еще проще, чем кажется:

from tkinter import * 
import tkinter as tk # you could just say 'import tkinter', but 'tk' is easier to type 

root = tk.Tk() # or, as @TidB mentioned, tkinter.Tk() if you're importing it as it is 

root.option_add('*tearOff', False) 
# insert all your code.... 
# and so on... 
menubar1.add_cascade(menu = other, label = 'Other') 

root.mainloop() # keeps the window up 

В принципе, просто добавьте mainloop() и Tk().

Кроме того, поскольку from tkinter import * естественно импортирует все, вам почти наверняка не нужно from tkinter import ttk (ваша вторая строка кода).

Смежные вопросы