카테고리 없음

python 예제 - tkinter 체크박스(checkbutton) 상태 확인 및 저장 기능

gomming 2021. 2. 28. 00:22

tkinter GUI 라이브러리

tkinter 는 python 기본 라이브러리로 기능이 뛰어나고

사용자에 따라 굉장히 폭 넓이 활용할 수 있는 우수한 모듈입니다.

처음 GUI 를 만들어보시는 분들에게 적극 추천합니다.

tkinter 화면 생성

코드를 조금 씩 추가하면서 설명 드리도록 하겠습니다.

 

from tkinter import *
import tkinter as tk
import tkinter.ttk
import tkinter.font
import os

window = Tk()
window.title("check box test")

window.geometry('800x500+220+200')
window.mainloop()

우선 이렇게 위의 코드만 작성하여 실행하면

geometry의 크기와 위치 값에 맞춰 빈화면이 뜨고 title바에 check box test라고

제목이 나타납니다.

체크박스 추가하기

checkbutton

체크박스를 2개 추가해 보겠습니다.

from tkinter import *
import tkinter as tk
import tkinter.ttk
import tkinter.font
import os

window = Tk()
window.title("check box test")

CheckVar1=IntVar()
CheckVar2=IntVar()

c1=Checkbutton(window,text="Music",variable=CheckVar1)
c2=Checkbutton(window,text="Video",variable=CheckVar2)

c1.pack()
c2.pack()

window.geometry('800x500+220+200')
window.mainloop()

위 코드를 실행 하면 Music 과 Video라는 체크 버튼이 생성 되고

클릭할 시 활성 비활성화 상태로 변화합니다.

그러면 이제 활성화 비활성화 상태를 클릭할때 마다 출력해주도록 만들어 보겠습니다.

체크버튼 상태 출력하기

variable

from tkinter import *
import tkinter as tk
import tkinter.ttk
import tkinter.font
import os

window = Tk()
window.title("check box test")

def status1_print():
    print(CheckVar1.get())

def status2_print():
    print(CheckVar2.get())

CheckVar1=IntVar()
CheckVar2=IntVar()

c1=Checkbutton(window,text="Music",variable=CheckVar1, command=status1_print)
c2=Checkbutton(window,text="Video",variable=CheckVar2, command=status2_print)

c1.pack()
c2.pack()

window.geometry('800x500+220+200')
window.mainloop()

 

이렇게 variable에 지정한 변수에 상태 값이 저장되기 때문에

CheckVar1.get() 명령어로 상태 값을 출력할 수 있습니다.

클릭 시 마다 1,0으로 변화한 상태를 콘솔 창에서 확인할 수 있습니다.

그러면 최종 선택된 상태를 파일로 저장해 보겠습니다 .

체크버튼 상태를 파일로 저장

file에 저장

from tkinter import *
import tkinter as tk
import tkinter.ttk
import tkinter.font
import os

window = Tk()
window.title("check box test")

t_path = 'c:\\py_gom\\status.txt'

def status1_print():
    print(CheckVar1.get())

def status2_print():
    print(CheckVar2.get())

def save_status(event):
    file = open(t_path,'w')
    file.write('%s\n'%CheckVar1.get())
    file.write('%s'%CheckVar2.get())
    file.close()
    print ('save complete!')

def file_open (event):
    os.system('start %s'%t_path)

CheckVar1=IntVar()
CheckVar2=IntVar()

c1=Checkbutton(window,text="Music",variable=CheckVar1, command=status1_print)
c2=Checkbutton(window,text="Video",variable=CheckVar2, command=status2_print)

c1.pack()
c2.pack()

save_btn = tkinter.Label (window, text="save",bg='grey19', fg = 'snow')
save_btn.bind('<Button-1>', save_status)
save_btn.bind('<Button-3>', file_open)
save_btn.place(x=180,y=100)

window.geometry('800x500+220+200')
window.mainloop()

 

save 라벨을 만들어서 왼쪽 클릭할 시,

status.txt 라는 파일에 상태를 저장하도록 하였습니다.

그리고 save라벨을 오른쪽 클릭하면 텍스트 파일을 열어서 보여주도록 하였습니다.

save 라벨 왼쪽 클릭 시 파일 저장

오른 쪽 클릭 시 아래와 같이 텍스트 파일 오픈.

그럼 마지막으로 저장된 텍스트 파일의 정보를 이용하여,

다음 실행 시 상태가 정해지도록 해보겠습니다.

체크버튼 상태 저장 및 반영하기

from tkinter import *
import tkinter as tk
import tkinter.ttk
import tkinter.font
import os

window = Tk()
window.title("check box test")

t_path = 'c:\\py_gom\\status.txt'


def status1_print():
    print(CheckVar1.get())

def status2_print():
    print(CheckVar2.get())

def save_status(event):
    file = open(t_path,'w')
    file.write('%s\n'%CheckVar1.get())
    file.write('%s'%CheckVar2.get())
    file.close()
    print ('save complete!')

def file_open (event):
    os.system('start %s'%t_path)

def close_sc(event):
    window.destroy()


CheckVar1=IntVar()
CheckVar2=IntVar()

c1=Checkbutton(window,text="Music",variable=CheckVar1, command=status1_print)
c2=Checkbutton(window,text="Video",variable=CheckVar2, command=status2_print)

c1.pack()
c2.pack()

stat_list = []
with open(t_path) as f:
    for line in f:
        stat_list.append(int(line))
print ('stat is %s'%stat_list)

if stat_list[0]==1:
    c1.toggle()
else:
    pass

if stat_list[1]==1:
    c2.toggle()
else:
    pass

save_btn = tkinter.Label (window, text="save",bg='grey19', fg = 'snow', width=7, height=2)
save_btn.bind('<Button-1>', save_status)
save_btn.bind('<Button-3>', file_open)

save_btn.place(x=380,y=100)

window.bind('<Escape>', close_sc)
window.geometry('800x500+220+200')
window.mainloop()

 

최종 코드 입니다.

with 문을 통해 status.txt 파일 내용을 불러와 stat_list에 저장하고

각 체크버튼의 값이 1일 경우 toggle() 명령어로 상태를 활성화 시켜줍니다.

serviceapi.nmv.naver.com/flash/convertIframeTag.nhn?vid=2BC50F40666D692C29D1094D0787416655BF&outKey=V12290b80b65b044101ad6b9438f8028aaf5ec852e847eb8497e56b9438f8028aaf5e&width=544&height=306

 

tkinter 체크버튼 활용 예제

 

serviceapi.nmv.naver.com

실행 동영상입니다.

 

 

체크버튼 상태 출력 및 저장, 반영 기능 작성 결과 영상입니다.

후기

esc 버튼을 누르면 창이 종료 되도록 하였습니다.

더 유익한 예제로 뵙겠습니다.