2017-01-03 1 views
0

При нажатии кнопки в строке меню появляется новое окно при нажатии. Тем не менее, новое окно появляется сразу же, когда основная программа начинает работать, прежде чем нажимать кнопку в меню.Перед тем, как щелкнуть по опции, чтобы запустить ее в основной программе, появится окно «Новый верхний уровень».

Как окно может появляться только при нажатии кнопки, а не сразу после запуска основной программы?

#Main Program 

from tkinter import * 
from tkinter import ttk 
import module 

root = Tk() 

main_menu_bar = Menu(root) 

main_option = Menu(main_menu_bar, tearoff=0) 
main_option.add_command(label = "Option 1", command = module.function()) 
main_menu_bar.add_cascade(label="Main Option", menu=main_option) 
root.config(menu=main_menu_bar) 

root.mainloop() 


#Module 
from tkinter import * 
from tkinter import ttk 

def function(): 
    new_window = Toplevel() 

ответ

2

Вместо:

main_option.add_command(label = "Option 1", command = module.function()) 

Try:

main_option.add_command(label = "Option 1", command = module.function) 

Если поставить скобки, то функция будет выполняться немедленно, в то время как если вы не поставите их это будет только быть ссылкой на эту функцию, которая будет выполняться по сигналу события.

Чтобы было понятнее, то же самое происходит, если вы хотите сохранить функции в списке для последующего выполнения:

def f(): 
    print("hello") 

a = [f()] # this will immediately run the function 
      # (when the list is created) and store what 
      # it returns (in this case None) 

b = [f] # the function here will *only* run if you do b[0]() 
+0

Спасибо TrakJohnson! Очень признателен! –

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