王岱熙 2023-08-17 17:37 采纳率: 100%
浏览 6
已结题

用Python的tkinter给Menu加个滚动条

我最近在做一个程序,其中有一项,点击输入框Entry后弹出菜单Menu,在Menu中选择菜单项,即可完成输入。但是有一个问题,这个菜单太长了,所以我希望能用Python的tkinter给Menu加个滚动条,使它变短。网上搜到各种教程,都是围绕窗口和Text或Canvas展开的,所以我想问一下,这是否可行呢?请您帮帮忙,解答一下我这个问题。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-17 21:35
    关注

    【以下回答由 GPT 生成】

    我可以理解你的问题。很遗憾,tkinter库的Menu组件本身是没有内置滚动条的功能的。因此,无法直接给Menu添加滚动条。

    不过,我们可以通过一些其他的方式来实现相似的效果。一种方法是使用Toplevel和Canvas组件来创建一个弹出窗口,然后在窗口中使用Scrollbar和Listbox组件来实现滚动列表。具体步骤如下:

    1. 导入必要的tkinter模块和类:
    from tkinter import Tk, Toplevel, Canvas, Scrollbar, Listbox
    
    1. 创建一个Toplevel窗口,作为菜单的弹出窗口:
    menu_window = Toplevel(root)
    
    1. 创建一个Canvas组件,用于显示菜单项:
    canvas = Canvas(menu_window)
    
    1. 创建一个Scrollbar组件,用于控制菜单项的滚动:
    scrollbar = Scrollbar(menu_window, orient="vertical", command=canvas.yview)
    
    1. 将Scrollbar和Canvas组件进行关联:
    canvas.configure(yscrollcommand=scrollbar.set)
    
    1. 创建一个Listbox组件,用于显示具体的菜单项:
    menu_list = Listbox(canvas)
    
    1. 将Listbox组件添加到Canvas组件中:
    canvas.create_window((0, 0), window=menu_list, anchor="nw")
    
    1. 给Listbox组件添加菜单项内容:
    menu_list.insert(0, "菜单项1")
    menu_list.insert(1, "菜单项2")
    # 添加更多的菜单项...
    
    1. 定义Canvas组件的滚动区域大小:
    canvas.configure(scrollregion=canvas.bbox("all"))
    
    1. 将Canvas和Scrollbar组件进行布局:
    canvas.pack(side="left", fill="both", expand=True)
    scrollbar.pack(side="right", fill="y")
    
    1. 最后,让菜单窗口显示出来:
    menu_window.mainloop()
    

    这样,你就可以在点击输入框后弹出一个带有滚动条的菜单窗口。希望对你有帮助!如果你有其他问题,可以随时问我。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月17日