在主程序中单击 运行 选项之前,会出现新的顶级 window。
New Top Level window appears before clicking the option to run it in the main program.
单击菜单栏中的选项时,假设单击时会出现新的 window。但是,当主程序开始 运行 时,在单击菜单中的选项之前,新的 window 会立即出现。
为什么window只在点击选项时出现,而不是在主程序开始运行时立即出现?
#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()
而不是:
main_option.add_command(label = "Option 1", command = module.function())
尝试:
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]()
单击菜单栏中的选项时,假设单击时会出现新的 window。但是,当主程序开始 运行 时,在单击菜单中的选项之前,新的 window 会立即出现。
为什么window只在点击选项时出现,而不是在主程序开始运行时立即出现?
#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()
而不是:
main_option.add_command(label = "Option 1", command = module.function())
尝试:
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]()