当前位置:首页 » tkinter » 正文

tkinter的Menu菜单组件详细讲解

Menu菜单组件涉及的知识不少,但如果我们只是从做一个最简单的菜单开始学,也比较容易,所以,我把菜单所涉及的众多参数,方法放在最后,如果想深入学习,就去查询相关知识。

建立菜单栏的语法:Menu(父组件)

我们以前用root=Tk()  建立的窗体,除了标题,图标,背景颜色等属性参数外,还有另外有一个menu属性参数,所以,建立好菜单后,我们要把窗体的menu参数设定为我们建立好的菜单组件。

我们先看一下平时见过的菜单样式:

     2.PNG

  菜单的结构如下图:

 1.PNG

  如上图所示,我们先来建立一个上图最上面的菜单栏(红框)。

建立菜单栏的代码如下:

from tkinter import *
 
root=Tk()
 
menubar=Menu(root) # 建立最顶层菜单栏
root.config(menu=menubar) # 设置窗体的菜单参数为最顶层菜单
 
root.mainloop()

运行结果:

     3.PNG

噫,怎么什么也没有呀,事实上,这个菜单栏已经建立好了,只是你看不到而已,为什么这样说,因为菜单栏组件跟Frame这些容器组件一样,如果窗口组件里面没有别的组件在里面,就会看不到这个容器组件。所以,我们现在要再做2件事,第一就是往这个菜单栏里,先建立“文件”,“编辑”,“格式”等菜单,第二就是把把菜单项(如,新建,打开,保存,退出等菜单项)装入这个菜单里。

在顶层菜单栏里建立菜单的语法,分成2行来写:

A=Menu(menubar, 参数)  # 在父组件menubar建立一个菜单A,它的属性(如:字体,背景颜色,是否可拆分等)用参数来表示

menubar.add_cascade(label='文件',menu=A) # menubar菜单栏显示这个菜单

 

在上面代码的基础上,我们增加“文件”菜单。代码如下:

from tkinter import *
 
root=Tk()
 
menubar=Menu(root) # 建立最顶层菜单栏
root.config(menu=menubar) # 设置窗体的菜单参数为最顶层菜单
 
A=Menu(menubar,tearoff=0)  # 在菜单栏menubar下创建一个菜单
menubar.add_cascade(label='文件',menu=A) # 在菜单栏menubar显示出来
 
root.mainloop()

运行结果         丶丌皛

     4.PNG

文件菜单在最顶层的菜单栏里显示出来了,但这个菜单下面没有任何菜单项,所以,我们下一步就是做出菜单项。

菜单项有多种:命令菜单,单选按钮,多选按钮,分割线

假定菜单为A,那菜单创建的语法分别是:

   A.add_command(label=菜单项名,参数.....)   #创建命令菜单项

   A.add_radiobutton(label=菜单项名, 参数.....)  # 创建单选按钮项

   A.add_checkbutton(label=菜单项名,参数.....)   # 创建多选按钮项

   A.add_separator()   #  创建分割线

 

我们先在上面的代码基础上,在菜单A下添加3个命令菜单项;

命令菜单项就像是平整外形的按钮,命令菜单项参数也有按钮的相同的参数command,这个参数可以绑定一个函数。

添加命令菜单项:

from tkinter import *
 
root=Tk()  #  源码来自wb98.com
 
menubar=Menu(root) # 建立最顶层菜单栏
root.config(menu=menubar) # 设置窗体的菜单参数为最顶层菜单
 
A=Menu(menubar,tearoff=0)  # 在菜单栏menubar创建一个菜单
menubar.add_cascade(label='文件',menu=A) # 在菜单栏menubar显示出来
 
A.add_command(label='新建',command=None) # 创建新建菜单项
A.add_command(label='打开',command=None) # 创建打开菜单项
A.add_command(label='保存',command=None) # 创建保存菜单项
 
root.mainloop()

运行结果

     5.PNG

以上代码成功添加3个菜单项,由于我没有写command调用的函数,我就先暂时写None,你也可以写引号""来代替。

  下面学着在菜单里添加一条分割线,添加分割线最简单,就一句话,不用任何参数:A.add_separator()

在分割线下面,我们添加2个单选按钮菜单项,就跟我们以前学过的单选按钮知识一样,也要绑定一个变量,用变量.set()来设定一个初值,这跟我们以前学的创建单选按钮方法基本上也是一样的:

var1=IntVar() # 先创建一个变量,用于单选按钮来绑定
var1.set(1)   # 为变量设置一个初值
A.add_radiobutton(label="单选按钮的文本",variable=var1,value=1) # value用于各单选按钮的区分

下面是添加分割线,添加2个单选按钮菜单项的全部代码:

from tkinter import *
 
root=Tk()
 
menubar=Menu(root) # 建立最顶层菜单栏
root.config(menu=menubar) # 设置窗体的菜单参数为最顶层菜单
 
A=Menu(menubar,tearoff=0)  # 在菜单栏menubar创建一个菜单
menubar.add_cascade(label='文件',menu=A) # 在菜单栏menubar显示出来
 
A.add_command(label='新建',command=None) # 创建新建菜单项
A.add_command(label='打开',command=None) # 创建打开菜单项
A.add_command(label='保存',command=None) # 创建保存菜单项
 
A.add_separator() # 创建分割线

var1=IntVar() # 创建一个变量
var1.set(1)   # 设置初值(男生)
A.add_radiobutton(label="男生",variable=var1,value=1) # 创建单选按钮菜单项
A.add_radiobutton(label="女生",variable=var1,value=2) # 创建单选按钮菜单项
 
root.mainloop()

运行结果:

     6.PNG


  下面我来建立多选按钮菜单项。建立多选按钮菜单选项,跟创建多选按钮是类似的,有几个多选按钮菜单项就先创建几个变量,然后在创建菜单项绑定这些变量。 

建立多选按钮菜单项代码如下:

from tkinter import *
 
root=Tk()
 
menubar=Menu(root) # 建立最顶层菜单栏
root.config(menu=menubar) # 设置窗体的菜单参数为最顶层菜单
 
A=Menu(menubar,tearoff=0)  # 在菜单栏menubar创建一个菜单
menubar.add_cascade(label='文件',menu=A) # 在菜单栏menubar显示出来
 
A.add_command(label='新建',command=None) # 创建新建菜单项
A.add_command(label='打开',command=None) # 创建打开菜单项
A.add_command(label='保存',command=None) # 创建保存菜单项
 
A.add_separator() # 创建分割线
 
var1=IntVar() # 创建一个变量
var1.set(1)   # 设置初值(男生)
A.add_radiobutton(label="男生",variable=var1,value=1) # 创建单选按钮菜单项
A.add_radiobutton(label="女生",variable=var1,value=2) # 创建单选按钮菜单项
 
A.add_separator() # 创建分割线
 
var2=BooleanVar() # 为多选按钮创建变量
var3=BooleanVar() # 为多选按钮创建变量
var2.set(True)  # 设初值,幸福勾选
var3.set(True)  # 设初值,快乐勾选
A.add_checkbutton(label='幸福',variable=var2)  # 创建多选按钮菜单项
A.add_checkbutton(label='快乐',variable=var3)  # 创建多选按钮菜单项
 
root.mainloop()

运行结果

    7.PNG

好了,菜单,以及菜单下的:命令菜单项,单选,多选按钮菜单项,分割线都成功建立起来了。如果你想再建新的菜单,如:编辑,格式,查看,帮助等菜单,就把上面的工作重做一下。(wb86.com


现在我来讲一下创建子菜单,也就是菜单里的菜单,现在我在“文件”菜单里,再创建一个菜单“子菜单”,子菜单里再根据我们学的知识,再加入命令菜单项等。


加入子菜单代码:

from tkinter import *
 
root=Tk() # 源码来自wb98.com
 
menubar=Menu(root) # 建立最顶层菜单栏
root.config(menu=menubar) # 设置窗体的菜单参数为最顶层菜单
 
A=Menu(menubar,tearoff=0)  # 在菜单栏menubar创建一个菜单A
menubar.add_cascade(label='文件',menu=A) # 在菜单栏menubar显示文件菜单
 
A.add_command(label='新建',command=None) # A菜单里创建新建菜单项
A.add_command(label='打开',command=None) # A菜单里创建打开菜单项
A.add_command(label='保存',command=None) # A菜单里创建保存菜单项
 
A.add_separator() # A菜单里创建分割线
 
var1=IntVar() # 创建一个变量
var1.set(1)   # 设置初值(男生)
A.add_radiobutton(label="男生",variable=var1,value=1) # 创建单选按钮菜单项
A.add_radiobutton(label="女生",variable=var1,value=2) # 创建单选按钮菜单项
 
A.add_separator() # 创建分割线
 
var2=BooleanVar() # 为多选按钮创建变量
var3=BooleanVar() # 为多选按钮创建变量
var2.set(True)  # 设初值,幸福勾选
var3.set(True)  # 设初值,快乐勾选
A.add_checkbutton(label='幸福',variable=var2)  # 创建多选按钮菜单项
A.add_checkbutton(label='快乐',variable=var3)  # 创建多选按钮菜单项
 
A.add_separator() # 创建分割线
 
B=Menu(A,tearoff=0)  # A菜单里创建一个菜单B
A.add_cascade(label='子菜单',menu=B) # 在菜单A里显示“子菜单”
 
B.add_command(label='命令菜单项1',command=None) # B菜单创建菜单项
B.add_command(label='命令菜单项2',command=None) # B菜单创建菜单项
 
root.mainloop()

运行结果

    8.PNG

 

好了,子菜单也成功建立起来,我现在一讲一下,在代码中出现的参数 tearoff  前面的代码都有这个参数,现在一并讲解。我们先把代码里的 tearoff=0  改成 tearoff=1  然后运行一下,你会发现,打开菜单,菜单里有一根虚线:

    9.PNG

你点击这个虚线,你会发现文件菜单可以出现一个分身,这个分身从窗体脱离出来,但这个分身功能好像没有什么多大的作用,所以,一般来说,都会这个功能禁止它,用tearoff=0  tearoff=False  都可以禁止。

创建菜单的基本知识就讲解完了,如果你想创建新的菜单,如创建“编辑”,“格式”,“帮助”菜单,你只要上面的知识重做一次就行了,当然对象名,变量名不要忘记改成别的名称。


下一篇文章我来讲一下为菜单项设置图标的方法以及如何做出弹出菜单

此文章来自:wb98.com  网站还有相关的系列课程文章,感兴趣的可以前往。

 


来源:济亨网

本文链接:http://wb98.com/post/326.html

    << 上一篇 下一篇 >>

    湘公网安备 43011102000514号 - 湘ICP备08100508号