目录
一、实现下拉菜单和级联菜单
这里撤回,后台回复选项设置了具体的回调函数。
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()