How to use add_radiobutton() to cascade in Menu() from Tkinter to set a default checkmark next to one of the values?

Question:

When program starts with the default size, for example 10×10, in the size submenu the checkmark should already be in front of the 10×10 line. Need to initially specify one of the options, and then to be able to choose any option.

from tkinter import Tk, Menu

root = Tk()
menubar = Menu(root)
size = Menu(menubar, tearoff=0)
size.add_radiobutton(label='5x5')
size.add_radiobutton(label='10x10')  # <- Checkmark must be here when program starts.
                                     # When choosing another option, it must be unmarked,
                                     # like in this example
size.add_radiobutton(label='15x15')
menubar.add_cascade(label='Size', menu=size)
root.config(menu=menubar)
root.mainloop()
Asked By: Jericho

||

Answers:

Do not add_radiobutton at the start. Only you can add add_radiobutton to submenu. And create another subemenu1, submenu2, etc.

Code:

from tkinter import Tk, Frame, Menu

 
root = Tk()
root.title("Submenu")

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

_menu = Menu(menubar, tearoff=0)

submenu1 = Menu(_menu, tearoff=0)
submenu1.add_radiobutton(label="5x5")
submenu1.add_radiobutton(label="OPtion 3")
submenu1.add_radiobutton(label="Option 4")

submenu = Menu(_menu, tearoff=0 )
submenu.add_radiobutton(label="10x10")
submenu.add_radiobutton(label="Option 1")
submenu.add_radiobutton(label="Option 2")
 

_menu .add_cascade(label="5x5", menu=submenu1)
_menu .add_cascade(label='10x10', menu=submenu) 
_menu .add_cascade(label="15x15")
menubar.add_cascade(label="Size", menu=_menu )

root.mainloop()
Answered By: toyota Supra

The radiobuttons need a Tk variable to group the buttons. The code below uses an IntVar. The result is reported in a Label.

import tkinter as tk

root = tk.Tk()
root.geometry( '100x100')
radio_var = tk.IntVar( value = 10 )  # Option 10 is the default.

menubar = tk.Menu(root)
size = tk.Menu(menubar, tearoff=0)
size.add_radiobutton(label='5x5', variable = radio_var, value = 5 )
size.add_radiobutton(label='10x10', variable = radio_var, value = 10 )
size.add_radiobutton(label='15x15', variable = radio_var, value = 15 )
menubar.add_cascade(label='Size', menu=size)
root.config(menu=menubar)
 
lab = tk.Label( root, textvariable = radio_var )
lab.grid()

root.mainloop()
Answered By: Tls Chris
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.