"""
添加顶层菜单:
1、我们可以使用Menu类来新建一个菜单,Menu和其他的组件一样,第一个是parent,这里通常可以为窗口
2、然后我们可以用add_command方法来为它添加菜单项,
如果该菜单是顶层菜单,则添加的菜单项依次向右添加。
如果该菜单是顶层菜单的一个菜单项,则它添加的是下拉菜单的菜单项。
3、add_command 中的参数常用的有 label 属性,用来指定的 是菜单项的名称,command 属性用来指定被点击的时候调用的方法,
acceletor 属性指定的是快捷键,underline 属性 是是否拥有下划线。
4、最后可以用窗口的 menu 属性指定我们使用哪一个作为它 的顶层菜单。 ************有子菜单的情况*************
1、如果有子菜单,则情况稍微复杂点,这个时候,我们需 要使用 add_cascade,cascade 可以理解为“级联”,即它 的作用只是为了引出后面的菜单。
2、add_cascade 的一个很重要的属性就是 menu 属性,它指 明了要把那个菜单级联到该菜单项上,当然,还必不可少 的就是 label 属性,用于指定该菜单项的名称。
3、我们先新建一个 Menu 的实例,然后使用 add_command 来 添加菜单项,这样等该菜单建立完毕,我们要把它作为另 一个菜单项的子菜单,就需要使用 add_cascade 方法 """ from tkinter import * root = Tk()
root.wm_title("菜单")
root.geometry("400x300+300+100") menubar = Menu(root) # for item in ['文件','编辑','视图','关于']:
# # add_command 添加菜单项
# menubar.add_command(label = item) fmenu = Menu(menubar)
for item in ['新建','打开','保存','另存为']:
fmenu.add_command(label = item) emenu = Menu(menubar)
for item in ['复制','粘贴','剪切']:
emenu.add_command(label = item) vmenu = Menu(menubar)
for item in ['默认视图','新式视图']:
vmenu.add_command(label = item) amenu = Menu(menubar)
for item in ['版权信息','其他说明']:
amenu.add_command(label = item) menubar.add_cascade(label = "文件",menu = fmenu)
menubar.add_cascade(label = "编辑",menu = emenu)
menubar.add_cascade(label = "视图",menu = vmenu)
menubar.add_cascade(label = "关于",menu = amenu) # 这两种方法都可以
root['menu']= menubar
# root.config(menu=menubar)#将root根窗口的顶级菜单设置为menu
root.mainloop()
运行结果如下:

"""
************弹出菜单*****************
1.弹出菜单又叫“上下文菜单”,也叫“右键菜单”,它 通常是鼠标单击右键产生的菜单,因此会有“右键菜单” 的说法。
2.其实很多界面库里面都是给出了弹出菜单的简单的制作 方法的,但是 tkinter 里面我们却只能使用比较原始的事 件绑定的方式去做。
3.大体思路就是:我们先新建一个菜单,然后向菜单项中 添加各种功能,最后我们监听鼠标右键消息,如果是鼠标 右键被单击,此时可以根据需要判断下鼠标位置来确定是 哪个弹出菜单被弹出,然后使用 Menu 类的 pop 方法来弹出 菜单。 ************提前说明*************
1.Menu 类里面有一个 post 方法,它接收两个参数,即 x 和 y 坐标,它会在相应的位置弹出菜单。
2.还记得用 bind 方法来绑定事件吗?而且要记得鼠标右键 是用的<Button-3>。 """ from tkinter import * def test():
global root
Label(root,text = "测试").pack() root = Tk()
menubar = Menu(root) for x in ['vb','c','java','php']:
menubar.add_command(label = x) menubar.add_command(label = 'python',command = test) # 插入分割线
# 插入分割线和插入正常的菜单项操作很相似,只是使用 的方法是 add_separator,该方法无需参数。
menubar.add_separator() def pop(event):
menubar.post(event.x_root,event.y_root) root.bind("<Button-3>",pop)
root.mainloop()
"""
**************checkbutton 与 radiobutton********
1.checkbutton 原本是指“复选按钮”,radiobutton 原本 是指“单选按钮”。
2.单选按钮与复选按钮是相对来说的,即在这一组中,单 选按钮中只能有一个是被选定的,即一个人的性别是女的, 就一定不是男的,但是复选按钮对应的情况则是可以有多 个同时被选定,比如一个人即可以喜欢篮球,也可以喜欢 足球,还有可能喜欢乒乓球,等等。
3.在菜单中,也有类似的概念,即单选菜单和复选菜单。 它们分别用 add_radiobutton 和 add_checkbutton 来分别 添加。
4.这两种菜单都是如果一旦被选定,那么前面会有一个类 似于对号的标记出现,checkbutton 可以多个同时被选定, 但是 radiobutton 却只能被选定一个,即这个被选定了, 会自动取消前一个的选定。 """ from tkinter import * root = Tk()
m = Menu(root)
m2 = Menu(m)
for item in ['python','perl','php','ruby']:
m2.add_checkbutton(label = item)
m2.add_separator() for item in ['java','c++','c']:
m2.add_radiobutton(label = item) m.add_cascade(label = 'lan',menu = m2)
root['menu'] = m
root.mainloop()
运行结果如下:
 

GUI tkinter (Menu)菜单项篇的更多相关文章

  1. menu菜单项和menubutton菜单按钮的结合使用

    <!--创建需要显示的菜单按钮(munebutton),menu指定的是菜单项--><a href="javascript:void(0)" id="m ...

  2. Android Studio —— 创建Menu菜单项

    大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号. 这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件:

  3. [MFC] 对话框菜单项Menu选中打勾(单选,多选)

    近期需要实现一个功能:MFC对话框中,一项菜单下有五个菜单项,改变菜单项选中状态,每次只能选择其中一个打勾.(单选) 然后在网上搜了下资料,稍微总结下,以防后面用到. 1.单选实现: CMenu* m ...

  4. 菜单项(Menu)的初步认识 以及 多级菜单(SubMenu)的初步认识

    MainActivity.class public class MainActivity extends AppCompatActivity { private TextView textView; ...

  5. tkinter menu

    python] view plain copy '''''Tkinter教程之Menu篇''' '''''1.创建一个简单的Menu''' # 添加菜单hello和quit,将hello菜单与hell ...

  6. 微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项

    <!--禁用微信分享按钮--> <script> function onBridgeReady() { WeixinJSBridge.call('hideOptionMenu' ...

  7. 【crunch bang】 增加“菜单项”

    [右键菜单]->[Settings]->[Openbox]->[GUI Menu Editor] 挑选合适的位置,增加[菜单项],编辑内容.

  8. Android简易实战教程--第二十三话《绚丽的菜单项》

    转载本博客请注明出处:点击打开链接  http://blog.csdn.net/qq_32059827/article/details/52327456 今天这篇稍微增强点代码量,可能要多花上5分钟喽 ...

  9. python gui tkinter用法杂记

    1.treeview遍历 iids = tree.selection() t = tree.get_children() for i in t: print(tree.item(i,'values') ...

随机推荐

  1. openlivewriter安装配置

    一.前言 最近工作比较忙,同时也在构思下面我应该写哪方面的文章.上一篇文章,我直接在博客园管理后台自带的编辑器写的,确实比较麻烦,于是我就打算使用官方推荐的客户端“Open Live Writer”. ...

  2. Cycone IV的DDR2硬件设计前验证

    打算使用Cyclone IV的FPGA挂DDR2,按照流程,先使用Quartus跑IP,跑引脚分配,综合OK了再设计硬件,这部分主要是DM和DQS信号比较头疼,研究了好久才找到方法. 在Intel官网 ...

  3. 致初学者(二): HDU 2014~ 2032题解

    下面继续给出HDU 2014~2032的AC程序,供大家参考.2014~2032这19道题就被归结为“C语言程序设计练习(三) ”~“C语言程序设计练习(五) ”. HDU 2014:青年歌手大奖赛_ ...

  4. STA——multicycle path

    之前去地平线面试的时候被问到了multicycle path的一点问题,其实这个问题我应该知道,看过<Constraining Designs for Synthesis and Timing  ...

  5. (一)ArrayList集合源码解析

    一.ArrayList的集合特点 问题 结      论 ArrayList是否允许空 允许 ArrayList是否允许重复数据 允许 ArrayList是否有序 有序 ArrayList是否线程安全 ...

  6. Peer reports incompatible or unsupported protocol version.

    问题描述 ==> CentOS 操作系统 git clone 项目时出现类似如下错误: fatal: unable to access 'https://github.com/rancher/r ...

  7. 搜索专题题解(FJUT - OJ 17级搜索强化训练)

    题目连接:http://120.78.128.11/Contest.jsp?cid=221#H 题目都比较难,每道题都很经典,我也做的很慢,这篇博文算是个收录.具体题目题解点击下面超链接吧. 一.Br ...

  8. C#基础知识总结(三)--反射

    如何在C#.NET开发中使用反射. 首先,我新建一个普通的类库项目.在该项目的测试类中,定义好 属性.静态方法.实例方法.无参方法等... 代码如下: using System; using Syst ...

  9. JavaScript之基本语句

    前面的内容记录了JavaScript的一些基本概念,本次主要讲解一下JS中常用的语句. 和大多数其他编程语言一样,JS也主要包括:选择.循环.错误检测.函数等.JS的语句基本是由值.运算符.表达式.关 ...

  10. Android Studio [RecyclerView/瀑布流显示]

    PuRecyclerViewActivity.java package com.xdw.a122.recyclerview; import android.support.v7.app.AppComp ...