Tkinter主菜单怎么实现

发布时间:2022-01-13 21:18:20 作者:iii
来源:亿速云 阅读:149

今天小编给大家分享一下Tkinter主菜单怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

菜单是GUI程序的常用控件之一,本文说明Tkinter中如何使用菜单。

视频中的小程序是在之前的Text控件示例程序的基础上修改而成的,功能基本一致,只是增加了菜单操作的功能。读者可以稍微注意一下Enable/Disable按钮和菜单项的联动情况。

首先是构建主菜单对象。代码一共分两步:一是以主窗口为参数构建一个菜单对象top_menu,二是用top_menu对象设定主窗口对象的menu属性。

需要注意的是,这里没有使用pack,grid等布局方法。

top_menu = Menu(root)root.config(menu=top_menu)

接下来的代码为主菜单增加编辑(edit)和格式(format)两个下级菜单。

构建下级菜单也分两步:构建对象并添加到主菜单上。使用的参数应该基本不需要解释,tearoff除外。如果不设定tearoff为False的话,下级菜单的最上面会出现一条横线。代码中故意为edit_menu指定tearoff为False而format菜单使用缺省值,结果可以在菜单表示时看到。

edit_menu = Menu(top_menu, tearoff=False)top_menu.add_cascade(label='Edit', menu=edit_menu)format_menu = Menu(top_menu)top_menu.add_cascade(label='Format', menu=format_menu)

接下来的代码稍长,其中有一部分是之前示例代码的内容,读者只要注意菜单相关的部分就好。

text_enable = IntVar()text_enable.set(1)
# change state function.def enable_text():    text_enable.set(1)
# change state button.eb = Radiobutton(root,text="Enable", width=8, command=enable_text,                 value=1, variable=text_enable)eb.grid(row=1, column=0, sticky=E+W)edit_menu.add_radiobutton(label='Enable', command=enable_text,                          value=1, variable=text_enable)
# change state function.def disable_text():    text_enable.set(0)
# change state button.eb = Radiobutton(root,text="Disable", width=8, command=disable_text,                 value=0, variable=text_enable)eb.grid(row=1, column=1, sticky=E+W)edit_menu.add_radiobutton(label='Disable', command=disable_text,                      value=0, variable=text_enable)

代码首先构建一个text_enable变量,然后在按钮或者菜单操作时修改这个变量的值。同时在增加readiobutton菜单项时指定观察对象变量(variable)和显示为选中状态所需的变量值(value)。这种方式和Rediobutton控件的用法完全相同。

接下来我们希望修改Text控件的有效状态,这可以通过在上述代码中的enable_text/disable_text方法中增加修改Text控件的有效状态来实现,也可以采用下面的方法,即监视变量的状态变化:

def var_changed(*args):    if text_enable.get():        text.config(state='normal')        text.config(background='#a0ffa0')    else:        text.config(state='disabled')        text.config(background='#efefef')# set variable observer.text_enable.trace_variable('w', var_changed)

接下来是构建其他的普通菜单项的过程,读者可以结合按钮的代码来理解。形式稍有区别,内容完全相同。

# delete selection.def delete_selection():    try:        sel_from = text.index(SEL_FIRST)        sel_to = text.index(SEL_LAST)        # delete the selection.        text.delete(sel_from, sel_to)    except TclError:        pass
# delete selection button.db = Button(root,text="Delete", width = 8, command=delete_selection)db.grid(row=1, column=2, sticky=E+W)edit_menu.add_radiobutton(label='Delete', command=delete_selection)
# undo buttonundo = Button(root, text='Undo', width = 8, command=lambda:text.edit_undo())undo.grid(row=1, column = 3, sticky=E+W)edit_menu.add_radiobutton(label='Undo', command=lambda:text.edit_undo())
#redo buttonredo = Button(root, text='Redo', width = 8, command=lambda:text.edit_redo())redo.grid(row=1, column = 4, sticky=E+W)edit_menu.add_radiobutton(label='Redo', command=lambda:text.edit_redo())
# create fontsfonts = [    Font(family='SimHei', size=20, weight=BOLD),    Font(family='SimHei', size=16),    Font(family='SimSun', size=12, weight=BOLD),    Font(family='SimSun', size=12)    ]
# delete selection.def format(index):    tag_name = 'Format' + str(index)    try:        sel_from = text.index(SEL_FIRST)        sel_to = text.index(SEL_LAST)        for name in text.tag_names():            text.tag_remove(name, sel_from, sel_to)        text.tag_add(tag_name, sel_from, sel_to)        # set format at first time.        range_count = len(text.tag_ranges(tag_name))        if range_count == 2:            text.tag_config(tag_name, font=fonts[index])    except TclError:        pass
# delete selection button.for i in range(0, 4):    fb = Button(root,                text="Format" + str(i),                width = 8,                command=lambda v=i : format(v))    format_menu.add_command(label="Format" + str(i),                           command=lambda v=i : format(v))    fb.grid(row=2, column=i, sticky=E+W)
# create text widget.text = Text(root,            undo=True,            background="#a0ffa0", foreground="#000000",            height = 10)text.grid(row=3 , column=0, columnspan=8)

以上就是“Tkinter主菜单怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

推荐阅读:
  1. python tkinter之顶层菜单、弹出菜单实例
  2. Python TKinter怎么自动关闭主窗口

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

tkinter

上一篇:什么情况下使用Adapter模式

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》