【第八集】Python GUI之Menu

目录

一、实现下拉菜单和级联菜单

二、实现下拉菜单和级联菜单(带有 Checkbutton 和 Radiobutton )

三、实现弹出菜单


一、实现下拉菜单和级联菜单

这里撤回,后台回复选项设置了具体的回调函数。

def pyMenu():  
    root = tkinter.Tk()
 
    def callback():
        print("你好")

   #1.实现菜单的具体功能
    text = tkinter.Text(root, width=30, height=10,undo=True)
    text.grid(row=4, column=0, sticky=tkinter.W, padx=5, pady=10) 
    text.insert(tkinter.INSERT, '移网核心\n')
    text.insert(tkinter.END, '告警分析')  
    def undo():
        text.edit_undo()
   #2.在窗口基础上创建菜单对象
    menubar = tkinter.Menu(root)
   #3.在菜单对象的基础上创建小菜单对象 
    filemenu = tkinter.Menu(menubar, tearoff=False)
    filemenu.add_command(label='打开', command=callback)
    filemenu.add_command(label='保存', command=callback)
    filemenu.add_separator()  #添加分割线
    filemenu.add_command(label='退出', command=root.quit)
   #4.创建级联菜单,menu选项指定下一级的菜单是什么 
    menubar.add_cascade(label='文件', menu=filemenu)   
 
 
    editmenu = tkinter.Menu(menubar, tearoff=False)
    editmenu.add_command(label='剪切', command=callback)
    editmenu.add_command(label='拷贝', command=callback)
    editmenu.add_separator()  #添加分割线
    editmenu.add_command(label='粘贴', command=callback)
    editmenu.add_command(label='撤回', command=undo)
   #4.创建级联菜单,menu选项指定下一级的菜单是什么  
    menubar.add_cascade(label='编辑', menu=editmenu) 
 
    root.config(menu=menubar)

   #5.设置按钮的功能
    def show():
        print('回复成功')
    #注意放入的是Text而不是root了
    #(padx为左右边距  pady为上下边距,可以用来调节布局中的相对位置)
    #(row, column调整在布局中的绝对位置)
    b1 = tkinter.Button(root, text='后台回复', command=show).grid(row=5, column=0, sticky=tkinter.W, padx=5, pady=10) 
    text.window_create(tkinter.INSERT, window=b1)

   #6.显示图像(PhotoImage只能识别gif图)
    photo = tkinter.PhotoImage(file="")
    def show():
        text.image_create(tkinter.END, image=photo)
 
    b1 = tkinter.Button(root, text='显示截图', command=show).grid(row=5, column=1, sticky=tkinter.W, padx=5, pady=10) #注意放入的是Text而不是root了
    text.window_create(tkinter.INSERT, window=b1)

    tkinter.mainloop()
    
    #在IDLE中点退出没反应是因为IDLE也是Tkinter实现的,他们两个共用了一个mainloop(),退出代码重复了,产生了冲突
    #同一段程序中只能使用一种布局方式pack()包装,grid()网格,place()位置

二、实现下拉菜单和级联菜单(带有 Checkbutton 和 Radiobutton )

def pyMenu2(): 
    
    root = tkinter.Tk()
 
    def callback():
        print("你好")
 
    menubar = tkinter.Menu(root)
 
    openVar = tkinter.IntVar()
    saveVar = tkinter.IntVar()
    quitVar = tkinter.IntVar()
 
    filemenu = tkinter.Menu(menubar, tearoff=False)
    filemenu.add_checkbutton(label='打开', command=callback, variable=openVar)
    filemenu.add_checkbutton(label='保存', command=callback, variable=saveVar)
    filemenu.add_checkbutton()  #添加分割线
    filemenu.add_checkbutton(label='退出', command=root.quit, variable=quitVar)
    menubar.add_cascade(label='文件', menu=filemenu)
 
 
    editVar = tkinter.IntVar()
 
    editmenu = tkinter.Menu(menubar, tearoff=False)
    editmenu.add_radiobutton(label='剪切', command=callback, variable=editVar, value=1)
    editmenu.add_radiobutton(label='拷贝', command=callback, variable=editVar, value=2)
    editmenu.add_separator()  #添加分割线
    editmenu.add_radiobutton(label='粘贴', command=callback, variable=editVar, value=3)
    menubar.add_cascade(label='编辑', menu=editmenu) 
 
    root.config(menu=menubar)
#在IDLE中点退出没反应是因为IDLE也是Tkinter实现的,他们两个共用了一个mainloop(),退出代码重复了,产生了冲突
    tkinter.mainloop()

三、实现弹出菜单

def popupMenu():
    
    root =tkinter.Tk()
   #1.设置触发面板        
    frame = tkinter.Frame(root, width=512, height=512)
    frame.pack()
    def callback():
        print("你好")
   #2.设置弹出菜单内容
    menubar = tkinter.Menu(root)
    menubar.add_command(label='复制', command=callback)
    menubar.add_command(label='剪切', command=callback)
    menubar.add_command(label='粘贴', command=callback)
    
   #3.设置弹出菜单位置
    def popup(event):
        menubar.post(event.x_root, event.y_root)

   #4.设置触发事件,激发menubar
    frame.bind("<Button-3>", popup)
 
    tkinter.mainloop()

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值