본문 바로가기

코딩/파이썬 tkinter

[Tkinter] 15장. Checkbutton

Look and Feel!

 

위의 이미지와 같이 tkinter.Checkbutton 또는 ttk.Checkbutton은 사용자로부터 두 가지 상태 값을 입력받기 위해 사용될 수 있습니다.

 

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

 

  • 아래의 코드에선 총 8개의 Checkbutton을 생성합니다.
  • Checkbutton의 상태는 variable 속성으로 넘겨준 변수에 저장됩니다. 아래 코드와 같이 사용 가능한 변수 타입은 Boolean 외에 Int 및 String도 가능합니다.
  • 1번 Checkbutton의 상태값을 변경하면, 2번 ~ 4번 Checkbutton의 상태도 변경됩니다. 단, 3번 ttk.Checkbutton은 상태가 변경되지 않습니다.
  • Checkbutton이 비활성화 상태에서도 상태값은 변경될 수 있습니다.
  • tkinter.Checkbutton엔 Checkbutton 위젯 자체에 상태값을 바꾸는 메서드 select()가 있으나 ttk.Checkbutton은 이를 지원하지 않습니다.
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):
        # tkinter.Checkbutton 1
        self.tk_checkbutton_1_var = tk.BooleanVar()
        tk.Checkbutton(self, text='tkinter.Checkbutton 1',
                       variable=self.tk_checkbutton_1_var,
                       command=self.tk_checkbutton_1_changed)\
            .grid(row=0, column=0, padx=20, pady=10)

        # tkinter.Checkbutton 2
        self.tk_checkbutton_2_var = tk.IntVar()
        tk.Checkbutton(self, text='tkinter.Checkbutton 2',
                       variable=self.tk_checkbutton_2_var,
                       state='disabled')\
            .grid(row=1, column=0)

        # tkinter.Checkbutton 3
        self.tk_checkbutton_3_var = tk.IntVar()
        self.tk_checkbutton_3 = tk.Checkbutton(self, text='tkinter.Checkbutton 3',
                                               variable=self.tk_checkbutton_3_var)
        self.tk_checkbutton_3.grid(row=2, column=0)

        # tkinter.Checkbutton 4
        self.tk_checkbutton_4_var = tk.BooleanVar()
        tk.Checkbutton(self, text='tkinter.Checkbutton 4',
                       variable=self.tk_checkbutton_4_var,
                       indicatoron=False)\
            .grid(row=3, column=0)

        # --------------------------------------------------------------------
        # ttk.Checkbutton 1
        self.ttk_checkbutton_1_var = tk.BooleanVar()
        ttk.Checkbutton(self, text='ttk.Checkbutton 1',
                        variable=self.ttk_checkbutton_1_var,
                        command=self.ttk_checkbutton_1_changed)\
            .grid(row=0, column=1, padx=20)

        # ttk.Checkbutton 2
        self.ttk_checkbutton_2_var = tk.IntVar()
        ttk.Checkbutton(self, text='ttk.Checkbutton 2',
                        variable=self.ttk_checkbutton_2_var,
                        state=tk.DISABLED)\
            .grid(row=1, column=1)

        # ttk.Checkbutton 3
        self.ttk_checkbutton_3_var = tk.StringVar(value='off')
        ttk.Checkbutton(self, text='ttk.Checkbutton 3',
                        variable=self.ttk_checkbutton_3_var,
                        onvalue='on',
                        offvalue='off')\
            .grid(row=2, column=1)

        # ttk.Checkbutton 4
        self.ttk_checkbutton_4_var = tk.StringVar(value='off')
        ttk.Checkbutton(self, text='ttk.Checkbutton 4',
                        variable=self.ttk_checkbutton_4_var,
                        onvalue='on',
                        offvalue='off')\
            .grid(row=3, column=1)

    # callback for tkinter.Checkbutton 1
    def tk_checkbutton_1_changed(self):
        if self.tk_checkbutton_1_var.get():
            self.tk_checkbutton_2_var.set(1)
            self.tk_checkbutton_3.select()
            self.tk_checkbutton_4_var.set(True)
        else:
            self.tk_checkbutton_2_var.set(0)
            self.tk_checkbutton_3.deselect()
            self.tk_checkbutton_4_var.set(False)

    # callback for ttk.Checkbutton 1
    def ttk_checkbutton_1_changed(self):
        self.ttk_checkbutton_2_var.set(self.ttk_checkbutton_1_var.get())
        self.ttk_checkbutton_3_var.set(self.ttk_checkbutton_1_var.get())

        if self.ttk_checkbutton_1_var.get():
            self.ttk_checkbutton_4_var.set('on')
        else:
            self.ttk_checkbutton_4_var.set('off')
    # -------------------------------------------------------------------------
    # end//


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

 

'코딩 > 파이썬 tkinter' 카테고리의 다른 글

[Tkinter] 17장. LabelFrame  (0) 2020.11.16
[Tkinter] 16장. Radiobutton  (0) 2020.11.15
[Tkinter] 14장. 위젯의 focus() 메서드  (0) 2020.11.15
[Tkinter] 13장. Entry  (0) 2020.11.12
[Tkinter] 12장. Button  (0) 2020.11.11