【问题标题】:Tkinter Menubutton items disapperTkinter 菜单按钮项目消失
【发布时间】:2021-02-25 06:14:27
【问题描述】:

我有一个有效的代码

from tkinter import *

top = Tk()

mb=  Menubutton ( top, text="CheckComboBox", relief=RAISED )
mb.grid()
mb.menu  =  Menu ( mb, tearoff = 0 )
mb["menu"]  =  mb.menu

Item0 = IntVar()
Item1 = IntVar()
Item2 = IntVar()

mb.menu.add_checkbutton ( label="Item0", variable=Item0)
mb.menu.add_checkbutton ( label="Item1", variable=Item1)
mb.menu.add_checkbutton ( label="Item2", variable=Item2)

mb.pack()
top.mainloop()

当我单击“CheckComboBox”时,我会看到项目列表。 然后我点击“Item1”,项目列表消失,如果我想选择几个项目,我必须多次点击“CheckComboBox”。

我希望“时间列表”在单击项目后不会消失。

【问题讨论】:

  • 这可能不是一个好主意,因为在用户选择了菜单中的所有项目后,它仍然不会关闭,因此用户必须单击其他地方才能使其失去焦点并关闭。我认为不存在任何默认方法。

标签: python tkinter


【解决方案1】:

解决了:

import tkinter as tk

root = tk.Tk()
root.geometry("%ix%i" % (50, 50))

def raise_menubutton(*args):
    # Open the menu again. Taken from:
    # https://stackoverflow.com/a/38676204/11106801
    menubutton.menu.post(menubutton.winfo_rootx(), 
                menubutton.winfo_rooty() + menubutton.winfo_height())

menubutton = tk.Menubutton(root, text="CheckComboBox", relief="raised")
menubutton.grid()
menubutton.menu = tk.Menu(menubutton, tearoff=0)
menubutton["menu"] = menubutton.menu

menubutton.menu.bind("<Button-1>", raise_menubutton)

Item0 = tk.IntVar()
Item1 = tk.IntVar()
Item2 = tk.IntVar()

# Bind to variables changing
Item0.trace("w", raise_menubutton)
Item1.trace("w", raise_menubutton)
Item2.trace("w", raise_menubutton)

menubutton.menu.add_checkbutton(label="Item0", variable=Item0)
menubutton.menu.add_checkbutton(label="Item1", variable=Item1)
menubutton.menu.add_checkbutton(label="Item2", variable=Item2)

menubutton.pack()

root.mainloop()

至少可以在 Windows 上运行。

【讨论】:

    【解决方案2】:

    这样的菜单行为是由操作系统/窗口管理器定义的,tkinter 没有提供任何控制它的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-15
      • 2022-01-01
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 2013-03-20
      相关资源
      最近更新 更多