PYTHON图形化操作界面的编程七__创建菜单
十八、创建菜单
1、水平菜单的创建
创建菜单需要多条语句,所以这里通过实例来说明水平菜单的创建方法:
下面的语句可以在窗口中添加水平菜单,其中前四行语句是导入tkinter库和创建窗口w,从
第五行语句开始(红框中的语句)为创建菜单语句,运行结果如下面右图所示。
上面红框中的第一行代码为创建菜单对象m,红框中第2,3,4行代码为向菜单对象m中添加菜单项。红框中最后一条语句为将菜单显示在窗口中(实际是向窗口的”menu”属性赋值)
创建Menu对象时仍可使用前面介绍的控件的公共属性,同时菜单对象还可以使用如下的属性:
tearoff:该属性取值可以为True或False,此属性一般用在创建下拉菜单中,值为False时,创建的各级菜单间无虚线分隔。如果值为True,则上下级菜单间显示一条虚线分隔线且该菜单可以与上级菜单相分离。
menu:该属性值为下级菜单对象的名称。从而可以将另一菜单对象和本菜单项关联起来。使另一菜单项成为本菜单的子菜单。
菜单对象的的方法:
add_cascade():向菜单对象中添加菜单项。上面红框中的三行代码就使用了这个方法。
add_command():向菜单对象中增加菜单命令。
add_separator():在菜单对象中创建菜单项间的分隔线
下面通过实例来说明 上面方法的应用:
在上面的代码基础上添加下面的代码,红框中为添加的代码:下面右图为代码运行后的结果。
上面代码中第一个红框中的代码为:创建第二个菜单对象f1。第二个红框为小红框,其代码为:将新创建的菜单名称添加到原来第一个水平菜单项的menu属性中。使新创建的菜单对象成为原菜单的下级菜单。
第三个红框中共有三条语句,第一条语句在f1菜单对象中添加菜单项(用add_cascade方法创建的是菜单项,将来该菜单项下还有下级菜单)
第三个红框中的第二、三条语句均使用add.command方法向菜单对象f1中添加菜单命令,说明这两项本身就是菜单命令而无下级菜单。
第四个红框中有两条语句,第一条创建菜单分隔线,第二条创建菜单命令,并为该菜单命令的command属性赋值exit,表示选中此菜单命令后就执行”exit”命令关闭窗口,结束程序运行。上面右图是上面代码运行后的结果,子菜单中第一项为菜单项,其余这菜单命令。
下面的代码继续为第一个子菜单项添加下级菜单命令。下面右图为代码运行后的结果。
上面代码中第一个红框中的代码为创建了第三个菜单对象名称为ff1,第二个小红框中的代码为将新建立的菜单对象ff1的名称赋值给上一个菜单子项的menu属性,使新建立的菜单对象成为其子菜单项。
第三个红框中共四条代码,均用add_command方法创建,因此创建的均是菜单命令,为其指定command属性后就可以执行这些菜单命令。
下面为菜单命令指定执行的函数,为了减少代码量而不影响问题的本质,我们假设点击任一菜单命令均执行同一个函数fun,代码修改如下:下面红框中的代码为新添加的内容。
第一个红框为函数定义。为了节省篇幅我们在函数中放置了一个空语句,该语句不执行任何动作,只是占一条语句的位置。
其余红框中的代码圴相同,只是为各菜单命令设置了command属性,使点击这些菜单项时执行command属性所指定的函数。
实际使用中我们要为每个菜单命令指定不同的函数,并分别将这些函数名赋值给对应的菜单命令的command属性。
属性tearoff取值对菜单的影响大家可以自行偿试。通过上面介绍的方法我们可以构建任何结构的菜单。
2、快捷菜单的创建
快捷菜单是右击鼠标后出现的菜单,创建快捷菜单很简单,下面是创建快捷菜单的步骤:
1)先用下面的语句创建Menu对象:
q=Menu(tearoff=False)
其中 q是Menu对象的名称,属性tearoff=False是为了使创建的菜单不出现虚线分隔
2)用下面的语句向菜单对象中添加菜单命令,属性command后的值为选中该快捷菜单项后执行的函数名称。
q.add_command(label=”复制”,command=copy)
q.add_command(label=”剪切”,command=cut)
q.add_command(label=”粘贴”,command=paste)
3)用下面的语句将菜单绑定到窗口或其他控件,本例中绑定的是窗体。即右击窗口中的任意位置弹出快捷菜单。下面语句中的w是窗体的名称。若要绑定其他控件,则要用其他控件的名称。pop是点击鼠标右键后执行的函数或方法的名称。
w.bind(“”,pop)
4)用下面的代码定义pop方法,方法内容是调用菜单对象的post()方法完成参数的传递。
def
pop(event):
q.post(event.x_root,event.y_root)
5)定义选中菜单项后要执行的各函数
根据菜单项的功能,定义菜单项对应的函数,此例中要分别定义三个函数,此处只是为了验证快捷菜单项的执行情况,在每个函数中添加了一条输出语句。
def
copy():
print(“copy”)
def
cut():
print(“cut”)
def
paste():
print(“paste”)
最后的完整代码如下所示
上面代码运行后,在窗口空白外右击鼠标,出现快捷菜单,参见下图。
下面的代码可以创建二级快捷菜单,运行结果如下面右图所示。为了减少代码量而又不影响问题的讨论,下面代码将各菜单项的执行函数均设置为op,红框标出的代码为在上面例子的代码基础上添加的新代码。
仔细分析上面代码,不难看出,和前面下拉菜单创建时的方法是基本相同的。