Home > OS >  How to set default value of radio button using TKinter in a class?
How to set default value of radio button using TKinter in a class?

Time:09-22

I'm trying to set the default value of a radio button using TKinter and Python. It's my first time using it so I'm pretty new. My understanding is that the default value should be set to the second radio button in my example (value=1).

from tkinter import *
from tkinter import ttk

class RadioButtons:


    def __init__(self, root):
        self.root = root
        self.jobNum = IntVar(value=1)
        self.create()

    def create(self):
        content = ttk.Frame(self.root)
        
        radioButtons = ttk.LabelFrame(content, borderwidth=5, relief="ridge", width=400, height=400, text="Radio Buttons")
        radioButtonsLbl=ttk.Label(radioButtons, text="Buttons")

        # radio buttons
        jobType1 = ttk.Radiobutton(radioButtons, text="Button 0", variable= self.jobNum, value=0)
        jobType2 = ttk.Radiobutton(radioButtons, text="Button 1", variable= self.jobNum, value=1)
        jobType3 = ttk.Radiobutton(radioButtons, text="Button 2", variable= self.jobNum, value=2)

        content.grid(column=0, row=0)


        # add to grid
        radioButtons.grid(column=0, row=0, columnspan=3, rowspan=3)
        radioButtonsLbl.grid(column=0, row=5, padx=20, pady=5, sticky=W)
        jobType1.grid(column=1, row=5, padx=20, pady=0, sticky=W)
        jobType2.grid(column=1, row=6, padx=20, pady=0, sticky=W)
        jobType3.grid(column=1, row=7, padx=20, pady=0, sticky=W)


root = Tk()
RadioButtons(root)
root.mainloop()

However no radio button is selected when running the program. (screenshot of program)

The debugger confirms that the value of self.jobNum is set correctly.(screenshot of debugger)

How do I set the default value? I've tried a number of things including self.jobNum.set() before and after creating and adding the radio buttons but to no avail. What am I missing here? Is this some kind of scope issue?

CodePudding user response:

I suspect this has something to do with python's garbage collector. I can make the problem go away by saving a reference to RadioButtons(root):

root = Tk()
rb = RadioButtons(root)
root.mainloop()
  • Related