본문 바로가기

코딩/파이썬 tkinter

[Tkinter] 19장. tkinter 제어 변수

Tkinter는 다음의 네 가지 타입의 제어 변수를 지원합니다.

 

  • BooleanVar
  • IntVar
  • DoubleVar
  • StringVar

그리고 위젯의 특정 속성값은 tkinter가 제공하는 위 네 가지 제어 변수 중 하나를 사용해 값을 확인하거나 설정하는 것이 가능합니다.

 

예를 들어 Label 위젯을 통해 표시되는 내용은 Label 위젯의 text 속성을 통해서 뿐만 아니라 tkinter의 StringVar 제어 변수를 통해서도 설정이 가능합니다.

 

 

# python  3.8.6
# tkinter 8.6

import tkinter as tk
import tkinter.ttk as ttk


class MainWin(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.setting_win()
        self.setting_menu()
        self.setting_toolbar()
        self.setting_widget()

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

    def setting_menu(self):
        pass

    def setting_toolbar(self):
        pass

    # start -------------------------------------------------------------------
    def setting_widget(self):
        tk.Label(self, text='Label : text').pack()

        self.text_var = tk.StringVar()
        self.text_var.set('Label : textvariable')
        tk.Label(self, textvariable=self.text_var).pack()
    # end ---------------------------------------------------------------------


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

 

StringVar 클래스를 통해 str  타입의 제어 변수를 생성하고, 값 설정을 위해 set 메서드를 사용할 수 있습니다.

Label 위젯의 경우, textvariable 속성은 StringVar 클래스 타입의 제어 변수와 연동됩니다.

 

Tkinter 제어 변수의 값은 get 메서드로 확인하며, 값 설정을 위해 set 메서드를 사용합니다.

 

제어 변수 생성 시의 기본값(default value)은 아래 샘플 코드를 통해 확인할 수 있습니다.

 

        # examples
        def show_tk_ctrl_var_info(var):
            print(type(var.get()), var.get())

        show_tk_ctrl_var_info(tk.BooleanVar())
        show_tk_ctrl_var_info(tk.IntVar())
        show_tk_ctrl_var_info(tk.DoubleVar())
        show_tk_ctrl_var_info(tk.StringVar())

        show_tk_ctrl_var_info(tk.StringVar(value='string_var'))

        string_var = tk.StringVar()
        string_var.set('string_var')
        show_tk_ctrl_var_info(string_var)

 

<class 'bool'> False
<class 'int'> 0
<class 'float'> 0.0
<class 'str'> 
<class 'str'> string_var
<class 'str'> string_var