tkinter-menu组件

Menu

顶级菜单 -- 先创建一个菜单实例,然后使用 add() 方法将命令和其它子菜单添加进去.

root = Tk()

menubar = Menu(root)

menubar.add_command(label='File', command=xxx)

NOTE: 由于该组件是底层代码实现,所以不建议你自行通过按钮和其他组件来实现菜单功能。

子菜单 -- 创建方法也是大同小异,最主要的区别是它们最后需要添加到主菜单上(而不是窗口上)。

Filemenu=Menu(menubar, tearoff=FALSE) --- tearoff表示是否将菜单弹出到单独窗口

弹出菜单 -- 创建方法也是一致的,不过需要使用 post() 方法明确的将其显示出来,而且需要把鼠标事件和一个frame绑定

Menubutton() -- 该组件适用于你希望菜单按钮出现在其他位置的时候,  存在于Tkinter 的早期版本

创建一个 Menubutton 组件,并创建一个 Menu 组件与之相关联

 

OptionMenu(选择菜单)-- 下拉菜单的改版,它的发明弥补了 Listbox 组件无法实现下拉列表框的遗憾。

将一个列表加到optionmenu中,使用*[list]进行解包

 

注意:星号(*)作为形参的时候是起到“打包”的作用,相反,作为实参的时候是起到“解包”的作用。

从两个示例的输出可以看出:

当参数形如 *args 时,传递给函数的任意个实参会按位置打包成一个元组(tuple);

def fun1(*args):     

        print(type(args))

        print(args)

当参数形如 **args 时,传递给函数的任意个 key = value 实参会被包装进一个字典(dict)。

def fun2(**args):

        print(type(args))

        print(args)

有打包就有解包,通过在实参前加一个星号(*)或两个星号(**)来对列表(list)、元组(tuple)或字典(dict)进行解包

>>> a = [1, 2, 3, 4, 5]

>>> fun1(*a)

(1, 2, 3, 4, 5)

>>> c = {'one':1, 'two':2, 'three':3}

>>> fun2(**c)

{'two': 2, 'one': 1, 'three': 3}

	from tkinter import *
	
	root = Tk()
	
	menubar = Menu(root) # 创建一个menu实例
	
	def callback():
	    print('Workhuman!')
	
	# 创建层级菜单
	filemenu = Menu(menubar, tearoff=False)
	filemenu.add_command(label='Open', command=callback)
	filemenu.add_command(label='Save', command=callback)
	filemenu.add_separator()
	filemenu.add_command(label='Quit', command=root.quit)
	menubar.add_cascade(label='File', menu=filemenu) # 关联上级菜单
	
	# 层级菜单含有checkbutton
	var = IntVar()
	var1 = IntVar()
	helpmenu = Menu(menubar, tearoff=True)
	helpmenu.add_checkbutton(label='Online Help', variable=var, command=callback)
	helpmenu.add_checkbutton(label='About', variable=var1, command=root.quit)
	menubar.add_cascade(label='Help', menu=helpmenu)
	
	# 右键单击弹出菜单
	popupmenu = Menu(root)
	def popup(event): # 绑定点击事件
	    popupmenu.post(event.x_root, event.y_root)
	
	    # 含有radiobutton
	var2 = IntVar()
	popupmenu.add_radiobutton(label='Copy', variable=var2, value=1, command=callback)
	popupmenu.add_radiobutton(label='Delete', variable=var2, value=2, command=callback)
	popupmenu.add_radiobutton(label='Paste', variable=var2, value=3, command=callback)
	
	frame = Frame(root, width=300, height=200)
	frame.pack()
	frame.bind('<B3-Motion>', popup)
	
	# 创建页面中的菜单键menubutton
	mb = Menubutton(root, text='Click me', relief=RAISED, width=10, height=5)
	mb.pack()
	
	mm = Menu(mb, tearoff=False)
	mm.add_command(label='Who', command=callback)
	mm.add_command(label='Why', command=callback)
	mb.config(menu=mm)
	 
	# 创建可选菜单optionmenu
	cars = [
	    'Fradi',
	    'Audi',
	    'Benz',
	    'BMW',
	    'Bugadi'
	    ]
	var3 = StringVar()
	var3.set(cars[2])
	om = OptionMenu(root, var3, *cars) # 解包
	om.pack()
	
	def getvalue():
	    print(var3.get())
	
	Button(text='Get', command=getvalue).pack()
	
	
	root.config(menu=menubar)
	mainloop()

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TkinterPython标准库中的一个模块,用于创建图形用户界面(GUI)应用。它提供了丰富的基本组件,使得初学者可以轻松地开发跨平台的桌面应用程序。Tkinter的主要组件包括: 1. **Toplevel窗口** (或根窗口):这是最顶层的窗口,所有其他窗口都会在其上创建。 2. **Frame**:是一个容器,可以包含多个控件,并支持布局管理。 3. **Canvas**:用于绘制图形,比如线条、矩形、图片和文本等。 4. **Button**:用户可以通过点击交互的控件,通常带有标签文本。 5. **Label**:显示静态文本,不会响应用户输入。 6. **Entry**或`Text`:用于文本输入,Entry主要用于单行输入,Text则可多行编辑。 7. **Checkbutton** 和 `Radiobutton`:提供复选框和单选按钮。 8. **Listbox** 和 `Scrollbar`:列表框用来显示可滚动的选择列表,Scrollbar用来控制滚动。 9. **Menubutton** 和 `Menu`:创建下拉菜单。 10. **Combobox** 或 `OptionMenu`:结合了按钮和下拉列表,供用户选择预设选项。 11. **Scrollbar**:用于处理滚动条。 12. **Message Box**: 显示信息对话框,如警告、确认或错误提示。 13. **PanedWindow**: 可以分割窗口成多个部分,每个部分可以独立调整大小。 学习Tkinter时,理解如何使用这些组件及其布局管理(如`grid`、`pack`或`place`)至关重要。同时,掌握事件绑定(如`bind()`方法)以便处理用户的交互动作也是关键。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值