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

为tkinter菜单项设置图标,生成弹出菜单

为菜单添加图标:

大多情况只要用默认的参数就好,但有些外貌协会的人还是希望菜单能有图标,这样漂亮一些,下面  我再讲解一下如何拥有菜单图标。

其实以前我们学的按钮,单选,多选按钮都讲解了如何增加图标,在菜单里,命令菜单项就相当于按钮组件,单选,多选菜单项就相当于单选,多选组件,它们加图标的方法是一样的,即:

首先,创建图标对象:

img1=PhotoImage(file='16-1.png') # 创建图标对象

图标尺寸适当,默认的菜单,16x16尺寸的图片就行了,上面代码中 16-1.png 是我事先准备好的16 X 16 图片:  16-1.png

接下来就在创建命令菜单项,单选,多选菜单项加入图标相关参数:

image=img1,compound='left'  # compound这个参数不能少

我只在第1个命令菜单项,单选,多选菜单项加入图标,在上篇文章的代码的基础上,加入图标代码:  丶丌皛

from tkinter import *
 
root=Tk()  # 源码来自 wb98.com
 
img1=PhotoImage(file='16-1.png') # 创建图标对象,先适当尺寸的图片
 
menubar=Menu(root) # 建立最顶层菜单栏
root.config(menu=menubar) # 设置窗体的菜单参数为最顶层菜单
 
A=Menu(menubar,tearoff=1)  # 在菜单栏menubar创建一个菜单A
menubar.add_cascade(label='文件',menu=A) # 在菜单栏menubar显示文件菜单
 
A.add_command(label='新建',command=None,image=img1,compound='left') # 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,image=img1,compound='left') # 创建单选按钮菜单项
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,image=img1,compound='left')  # 创建多选按钮菜单项
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()

运行结果

    10.PNG

 

菜单的弹出方法post

点击鼠标右键,弹出菜单,这种操作很常见吧,下面我来讲一下如何做到弹出菜单。

其实只要为窗体绑定鼠标右键事件,然后在绑定事件调用的里,用菜单的post方法,弹出对应的菜单就行了。

我们先来了解一个菜单的post方法:

菜单.post ( 菜单弹出位置X坐标, 菜单弹出位置Y坐标 )

#  注意上面说的坐标是相对于屏幕左上角的坐标

 

绑定事件以前学过,相信大家没有忘记,以下代码:

root.bind("<Button-3>",popupmenu) 
# 窗体的鼠标右键事件绑定popupmenu函数

popupmenu函数:

def popupmenu(event): # 不要忘记写参数
    A.post(event.x_root,event.y_root) # A菜单弹出

加上上面的代码,运行后,鼠标右键点击窗体,就弹出A菜单,即“文件”菜单。

 

如果我们只是想弹出“子菜单”菜单,在popupmenu函数里,把A改成B就行了。

def popupmenu(event): # 不要忘记写参数
    B.post(event.x_root,event.y_root) # B菜单弹出

 

以下在上一篇文章基础上做出的弹出菜单的全部代码:

from tkinter import *
 
def popupmenu(event): # 不要忘记写参数
    A.post(event.x_root,event.y_root) # A菜单弹出
 
root=Tk()
 
img1=PhotoImage(file='16-1.png') # 创建图标对象,先适当尺寸的图片
 
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,image=img1,compound='left') # 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,image=img1,compound='left') # 创建单选按钮菜单项
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,image=img1,compound='left')  # 创建多选按钮菜单项
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.bind("<Button-3>",popupmenu) # 窗体的鼠标右键事件绑定popupmenu函数
 
root.mainloop()

运行结果

    11.PNG

 

上面的弹出菜单是在已经建立好的菜单基础上做出的弹出菜单,如果你不需要在窗体顶部显示菜单,你只是想做一个窗体弹出,那么,你可以省略2处代码:

1是在窗体上建立顶层菜单栏

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

2 是在顶层菜单栏显示菜单

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

去除以上2处代码,直接在窗体上建立一个菜单,然后在这个菜单里添加菜单项。

以下是只在窗体上建立弹出菜单的代码:

from tkinter import *
import webbrowser

def wb98():
    webbrowser.open('http://www.wb98.com',new=1)
    
def popup_menu(event):
    popup.post(event.x_root,event.y_root) # 弹出菜单
 
root=Tk()   
 
popup=Menu(root,tearoff=0) # 在窗体上建立菜单
popup.add_command(label='作者济亨网',command=wb98) # 在菜单上添加文件菜单项
popup.add_command(label='文件',command='') # 在菜单上添加文件菜单项
popup.add_command(label='保存',command='') # 在菜单上添加保存菜单项
popup.add_command(label='退出',command=root.destroy) # 在菜单上添加退出菜单项
 
root.bind("<Button-3>",popup_menu) # 为窗体的鼠标右键单击绑定popup_menu函数
 
root.mainloop()


运行结果

    12.PNG

 

菜单组件要学的知识还很多,我下一篇文章写菜单Menu的快捷键,以及相关的事件绑定。我的文章会先发布到我自己的网站 wb98.com 再发布到别的平台上去。


来源:济亨网

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

    << 上一篇 下一篇 >>

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