본문 바로가기

코딩/파이썬 tkinter

[Tkinter] 16장. Radiobutton

Look and Feel!

 

위의 이미지와 같이 tkinter.Radiobutton 또는 ttk.Radiobutton은 사용자로부터 여러 상태 값 중 하나를 입력받기 위해 사용될 수 있습니다.

 

아래 샘플 코드를 통해 Radiobutton의 여러 속성(옵션)에 대해 확인할 수 있습니다.

 

  • 아래의 코드에선 총 6개의 Radiobutton을 생성합니다.
  • Radiobutton 생성 시 value 속성을 통해 생성하는 해당 위젯에 대한 상태 값을 지정합니다.
  • tkinter.Radiobutton은 바탕색 변경이 가능한 background 속성을 지원하나 ttk.Radiobutton은 이를 지원하지 않습니다. 대신 ttk 위젯에선 style 속성을 사용할 수 있습니다.
import tkinter as tk
import tkinter.ttk as ttk


class MainWin(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.win_setting()
        self.win_setting_widgets()

    def win_setting(self):
        self.title('tkinter (things-studio.tistory.com)')
        self.geometry('480x320+200+200')
        self.minsize(200, 200)

    # //start
    # -------------------------------------------------------------------------
    def win_setting_widgets(self):
        self.radiobutton_var = tk.IntVar()

        # tkinter.Radiobutton 1
        self.tk_radiobutton_1 = tk.Radiobutton(self, text='blue', variable=self.radiobutton_var,
                                               command=self.radiobutton_changed, value=1)
        self.tk_radiobutton_1.grid(padx=10, pady=10, sticky=tk.W)

        # tkinter.Radiobutton 2
        tk.Radiobutton(self, text='red', variable=self.radiobutton_var,
                       command=self.radiobutton_changed, value=2)\
            .grid(padx=10, pady=10, sticky=tk.W)

        # tkinter.Radiobutton 3
        tk.Radiobutton(self, text='green', variable=self.radiobutton_var,
                       command=self.radiobutton_changed, value=3, state=tk.DISABLED)\
            .grid(padx=10, pady=10, sticky=tk.W)

        # ttk.Radiobutton 1
        ttk.Radiobutton(self, text='dark goldenrod', variable=self.radiobutton_var,
                       command=self.radiobutton_changed, value=4)\
            .grid(padx=10, pady=10, sticky=tk.W)

        # ttk.LabelFrame
        labelframe = ttk.LabelFrame(self, text='Lableframe')
        labelframe.grid(padx=10, pady=10, sticky=tk.W)

        # ttk.Radiobutton 2
        ttk.Radiobutton(labelframe, text='dark violet', variable=self.radiobutton_var,
                       command=self.radiobutton_changed, value=5)\
            .grid(row=0, column=0, padx=10, pady=10)

        # ttk.Radiobutton 3
        ttk.Radiobutton(labelframe, text='orange', variable=self.radiobutton_var,
                       command=self.radiobutton_changed, value=6)\
            .grid(row=0, column=1, padx=10, pady=10)

    # ttk.Radiobutton 1 : command=self.radiobutton_changed
    def radiobutton_changed(self):
        colors = ['light gray', 'blue', 'red', 'green', 'dark goldenrod', 'dark violet', 'orange']
        self.configure(background=colors[self.radiobutton_var.get()])
        self.tk_radiobutton_1['background'] = colors[self.radiobutton_var.get()]

    # -------------------------------------------------------------------------
    # end//


if __name__ == '__main__':
    MainWin().mainloop()

 

아래와 같이 Radiobutton엔 문자열 변수 및 문자열 값 할당도 가능합니다.

 

self.str_var = tk.StringVar()
ttk.Radiobutton(self, text='Apple', variable=self.str_var, value='apple').grid(
    sticky=tk.W)
ttk.Radiobutton(self, text='Strawberry', variable=self.str_var, value='strawberry').grid(
    sticky=tk.W)