Menu组件

今天说的Menu组件就是一些菜单组件,开始点点点。。。

Tkinter提供了一个Menu组件,可以实现顶级菜单,下拉菜单和弹出菜单。由于底层是代码实现和优化的,所以不太建议通过按钮和其他组件实现菜单功能。

 from tkinter import *

 root = Tk()
def check():
print("被调用查看了")
def slave():
print("调用保存了")
menubar = Menu(root)
filemenu = Menu(menubar,tearoff=)
filemenu.add_command(label="保存",command=slave)
filemenu.add_command(label="查看",command=check)
menubar.add_cascade(label="菜单",menu=filemenu)
root.config(menu=menubar)
mainloop()

执行结果:

创建下拉菜单(或者其他子菜单),方法都是一样的,只是他们最后都添加到主菜单中,而不是窗口上。

 from tkinter import *

 root = Tk()
def open():
print("被调用open...")
def slave():
print("调用save...")
def cut():
print("被调用cut...")
def slave():
print("被调用slave...")
def copy():
print("被调用copy...")
def paste():
print("被调用paste...")
menubar = Menu(root)
#创建一个下拉菜单·文件,然后讲台添加到顶级菜单中
filemenu = Menu(menubar,tearoff=)
filemenu.add_command(label="保存",command=slave)
filemenu.add_command(label="打开",command=open)
filemenu.add_separator()#下拉菜单的分隔线
filemenu.add_command(label="退出",command=root.quit)
menubar.add_cascade(label="文件",menu=filemenu)
editmenu = Menu(menubar,tearoff=)
editmenu.add_command(label="剪切",command=cut)
editmenu.add_command(label="拷贝",command=copy)
editmenu.add_command(label="粘贴",command=paste)
menubar.add_cascade(label="编辑",menu=editmenu)
#显示菜单
root.config(menu=menubar)
mainloop()

执行结果:

这里需要注意下,在调用command后面的函数的时候不能加括号的,因为在执行的时候回从上到下执行一遍,如果添加括号会直接调用,不加括号会等待操作后调用。

创建一个弹出菜单方法也是一致的,不过需要使用post()方法明确地将其显示出来。

 from tkinter import *

 root = Tk()
menubar = Menu(root)
def printItem():
print("popup menu")
filemenu = Menu(menubar,tearoff=)
for kk in ["python","php","jave"]:
filemenu.add_command(label=kk,command=printItem)
filemenu.add_separator()
menubar.add_cascade(label="language",menu=filemenu)
def popup(event):
#显示菜单
menubar.post(event.x_root,event.y_root)
#在这里相应鼠标右键事件,右键调用popup,此时与菜单绑定的是root,可以设置为其他的控件,在绑定的控件上右击可以弹出菜单
root.bind("<Button-3>",popup)
mainloop()

执行结果:

还有一个就是tearoff方法的用法,上面的例子中我们使用最多的是tearoff=False,如果有兴趣可以试下等于True。这是tearoff的用法,也可以用0和1,区别在于,用False的时候第一菜单就是Language下有一个横杠,在右键生成的顶端没有,点击横杠的时候直接生成一个窗口,如果使用True会生成两个一级菜单一个,二级菜单一个。

下面是Menu组件的最后一个用法,不但可以添加单选项的按钮也可以添加多选按钮,就是Checkbutton组件和Radiobutton组件类似。

 from tkinter import *

 root = Tk()
def check():
print("python3")
menubar = Menu(root)
openVar = IntVar()
saveVar = IntVar()
exitVar = IntVar()
filemenu = Menu(menubar,tearoff=)
filemenu.add_checkbutton(label="打开",command=check,variable=openVar)
filemenu.add_checkbutton(label="保存",command=check,variable=saveVar)
#创建一个横线是退出上面的
filemenu.add_separator()
filemenu.add_checkbutton(label="退出",command=root.quit,variable=exitVar)
#顶级菜单名称
menubar.add_cascade(label="文件",menu=filemenu)
editVar = IntVar()
editVar.set()
editmenu = Menu(menubar,tearoff=True)
editmenu.add_radiobutton(label="剪切",command=check,variable=editVar,value=)
editmenu.add_radiobutton(label="拷贝",command=check,variable=editVar,value=)
editmenu.add_radiobutton(label="粘贴",command=check,variable=editVar,value=)
menubar.add_cascade(label="编辑",menu=editmenu)
root.config(menu=menubar)
mainloop()

执行结果:

注意:程序运行后点击顶级菜单下的横杠,会有一个菜单,可以单选可以多选。

Menubutton组件

Menubutton组件是一个和Menu组件相关联的按钮,Menubutton组件生成的窗口可以放在任意位置,也可以调用下拉菜单。早期版本的Tkinter会使用Menubutton组件实现顶级菜单,但是现在会直接使用Menu组件,因此,如果想自己定义菜单按钮的位置时,可以使用Menubutton组件。

先创建一个Menubutton组件,然后在创建一个Menu组件,让他们两个进行关联。

 from tkinter import *

 root = Tk()
def call():
print(" python3.x")
menubar = Menu(root)
mb = Menubutton(root,text="python3",relief=RAISED)
mb.pack()
filemenu = Menu(mb,tearoff=)
filemenu.add_checkbutton(label="打开",command=call)
filemenu.add_command(label="保存",command=call)
filemenu.add_separator()
filemenu.add_command(label="退出",command=root.quit)
mb.config(menu=filemenu)
mainloop()

执行结果:

通过点击“python3”调用filemenu,然后进行操作。

OptionMenu组件

OptionMenu(选项菜单)说白了就是一个下拉菜单的改版,只是弥补了Listbox组件无法实现下拉列表的遗憾。如果想要创建一个选择菜单,只需要一个Tkinter变量即可。

 from tkinter import *

 root = Tk()
root.title("选择菜单")
variable = StringVar()
variable.set("python")
w = OptionMenu(root,variable,"python","php","c#","c++")
w.pack()
mainloop()

执行结果:

选择菜单建好了,如果想根据自己的选择进行操作的话,我们可以使用Tkinter变量的get()方法。

 from tkinter import *

 root = Tk()
root.title("选择菜单")
variable = StringVar()
variable.set("python")
def call():
print(variable.get())
w = OptionMenu(root,variable,"python","php","c#","c++")
w.pack()
Button(root,text="点我",command=call).pack()
mainloop()

执行结果:

最后演示一下如何将更多的选项添加到选项菜单中:

 from tkinter import *

 project = ["python3.6","java","go","php"]
root = Tk()
root.title("选择菜单")
variable = StringVar()
variable.set("python")
def call():
print(variable.get())
w = OptionMenu(root,variable,*project)
w.pack()
Button(root,text="点我",command=call).pack()
mainloop()

执行结果:

GUI的最终选择 Tkinter(七):菜单Menu组件、Menubutton组件、OptionMenu组件的更多相关文章

  1. Python之GUI的最终选择(Tkinter)

    首先,Tkinter是Python默认的GUI库,想IDLE就是用Tkinter设计出来的,因此直接导入Tkinter模块就可以啦 1 import tkinter (1)Tkinter初体验: 1 ...

  2. GUI的最终选择 Tkinter(五):Text用法

    Text组件 绘制单行文本使用Label组件,多行选使用Listbox,输入框使用Entry,按钮使用Button组件,还有Radiobutton和Checkbutton组件用于提供单选或多选的情况, ...

  3. GUI的最终选择 Tkinter(四):Entry、Listbox、Scrollbar和Scale组件

    Entry组件 Entry组件就是平时所说的输入框.输入框是程序员用到的最多的一个程序,例如在输入账号和密码的时候需要提供两个输入框,用于接收密码的输入框还会有星号将实际输入的内容隐藏起来. Tkin ...

  4. GUI的最终选择 Tkinter(九):事件

    Tkinter事件处理 Tkinter应用会花费大部分的时间在处理事件循环中(通过mainloop()方法进入),事件可以是触发的鼠标,键盘的操作,管理窗口触发的重绘事件(在多数情况下都是有用户间接引 ...

  5. GUI的最终选择 Tkinter(二):Label和Button组件

    Label组件 Lable组件是用于界面上输出描述的标签,例如提示用户“您下载的电影含有未成年人限制内容,请满18岁以后点击观看!”,先来上结果图: 在来看下它的代码: from tkinter im ...

  6. GUI的最终选择 Tkinter(八):Message组件、Spinbox组件、PanedWindow组件、Toplevel组件

    Message组件 Message(消息)组件是Label组件的变体,用于显示多行文本消息,Message组件能够自动执行,并调整文本的尺寸使其适应给定的尺寸. from tkinter import ...

  7. GUI的最终选择 Tkinter(六):Canvas组件

    Canvas组件,是一个可以让你任性的组件,一个可以让你随心所欲地绘制界面的组件.Canvas是一个通用的组件,它通常用于显示和编辑图形,可以用它来绘制直线,圆形,多边形,甚至是绘制其他组件. 在Ca ...

  8. GUI的最终选择Tkinter模块初级篇

    一.Tkinter模块的基本使用 1)实例化窗口程序 import tkinter as tk app = tk.Tk() app.title("FishC Demo") app. ...

  9. GUI的最终选择 Tkinter(一):Tkinter最初体验

    EasyGui就是一个简单的文字交互界面模块,从今天开始来开始学习Tkinter Tkinter是Python标准的Gui库,它实际是建立在Tk技术上的,Tk最初是为Tcl(一门工具名语言)所涉及的, ...

随机推荐

  1. tensorflow knn 预测房价 注意有 Min-Max Scaling

    示例数据: 0.00632 18.00 2.310 0 0.5380 6.5750 65.20 4.0900 1 296.0 15.30 396.90 4.98 24.00 0.02731 0.00 ...

  2. Stop logging "internal dummy connection" in Apache

    Apache 2.x keeps child processes alive by creating internal connections which appear in the log file ...

  3. Android的appium实例

    1.查看Android的应用包名和activity的方法   (网上有很多种方法,这里应用的是查看日志的方法) CMD中输入>adb logcat -c                   &g ...

  4. 浏览器,tab页显示隐藏的事件监听--页面可见性

    //监听浏览器tab切换,以便在tab切换之后,页面隐藏的时候,把弹幕停止 document.addEventListener('webkitvisibilitychange', function() ...

  5. java注解总结(1)

    1.什么是注解 注解,主要提供一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据. 2.介绍 何为注解?--->元数据:描述数据自身的数据. 注解就是代码的元数据,他们包含了代码自身 ...

  6. Oracle 表连接方式(1)---

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制) 3. 自连 ...

  7. [zoj3195]Design the city(LCA)

    解题关键:求树上三点间的最短距离. 解题关键:$ans = (dis(a,b) + dis(a,c) + dis(b,c))/2$ //#pragma comment(linker, "/S ...

  8. Will&nbsp;you&nbsp;still&nbsp;need&nbsp;me?

    ON FRIDAY, the National Bureau of Statistics announced that China's working-age population shrank la ...

  9. 4.xpath注入详解

    0x01 简介 XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在 URL.表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息.XPath注入发 ...

  10. 将Gridview导出到Excel

    GridViewToExcel(EdceExcelGV, "application/ms-exce","xxxxxx表"); protected void Gr ...