【问题标题】:Making Menu options with Checkbutton in Tkinter?在 Tkinter 中使用 Checkbutton 制作菜单选项?
【发布时间】:2010-10-14 01:13:45
【问题描述】:

我正在使用 Tkinter 制作菜单,但我想将 "add_checkbutton" 而不是 "add_command" 放入菜单选项,但问题是:我如何取消选择/选择复选框?

menu = Menu(parent)

parent.config(menu=menu)

viewMenu = Menu(menu)

menu.add_cascade(label="View", menu=viewMenu)
viewMenu.add_command(label = "Show All", command=self.showAllEntries)
viewMenu.add_command(label="Show Done", command= self.showDoneEntries)
viewMenu.add_command(label="Show Not Done", command = self.showNotDoneEntries)

【问题讨论】:

  • 您是指手动(使用鼠标)还是编程方式?

标签: python tkinter


【解决方案1】:

您需要将一个变量与复选按钮项相关联,然后设置该变量以使该项被选中或取消选中。例如:

import tkinter as tk

parent = tk.Tk()

menubar = tk.Menu(parent)
show_all = tk.BooleanVar()
show_all.set(True)
show_done = tk.BooleanVar()
show_not_done = tk.BooleanVar()

view_menu = tk.Menu(menubar)
view_menu.add_checkbutton(label="Show All", onvalue=1, offvalue=0, variable=show_all)
view_menu.add_checkbutton(label="Show Done", onvalue=1, offvalue=0, variable=show_done)
view_menu.add_checkbutton(label="Show Not Done", onvalue=1, offvalue=0, variable=show_not_done)
menubar.add_cascade(label='View', menu=view_menu)
parent.config(menu=menubar)

parent.mainloop()

【讨论】:

  • 您好,感谢您的回复。我在执行此操作时遇到了一点问题,因为我收到关于 tk.BooleanVar() 的错误
  • @itsaboutcode:可能是因为您以不同的方式导入 Tkinter。看起来您正在从 Tkinter 导入所有内容,因此您可以将代码更改为“BooleanVar()”。
  • 有没有办法只选择一个复选按钮?
  • @coder_not_found:是的:改用单选按钮。单选按钮专为独家选择而设计(从 N 中选择一个)。
【解决方案2】:

在这里,我尝试解决您的问题,并找到了一个逻辑。 希望对你有帮助:)

from tkinter import *
root=Tk()
root.geometry("300x300")
var1='button1'
var2='button2'

def fun(value):
    if value=="button1":
        testmenu.entryconfigure("button1",background="light blue")
        testmenu.entryconfigure("button2", background="#ede8ec")
        label.config(text="Afridi-1")
    if value=="button2":
        testmenu.entryconfigure("button2",background="light blue")
        testmenu.entryconfigure("button1", background="#ede8ec")
        label.config(text="Afridi-2")
mainmenu=Menu(root)
root.config(menu=mainmenu)
testmenu=Menu(mainmenu,tearoff=False,background="#ede8ec")
mainmenu.add_cascade(label="Test",menu=testmenu)
testmenu.add_command(label="button1",command=lambda :fun(var1))
testmenu.add_command(label="button2",command=lambda :fun(var2))
label=Label(text="")
label.pack(pady=125)
root.mainloop()

【讨论】:

    猜你喜欢
    • 2019-03-14
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多