본문 바로가기
GUI 튜토리얼/tkinter 한꼬집씩만 따라해보기

23. 프레임 안의 위젯들 속성을 일괄변경하기

by 일코 2022. 11. 20.

지난 포스팅

2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 22. 프레임 위젯 - 위젯들을 묶어주는 위젯

 

22. 프레임 위젯 - 위젯들을 묶어주는 위젯

지난 포스팅 2022.11.18 - [기타/tkinter 한꼬집씩만 따라해보기] - 21. 스크롤바 기본제공 텍스트 위젯 - Scrolledtext 21. 스크롤바 기본제공 텍스트 위젯 - Scrolledtext 지난 포스팅 2022.11.18 - [기타/tkinter 한

martinii.fun


 

이번 포스팅에서는 : 프레임의 자식위젯 속성 일괄변경

지난 포스팅에서 (레이블)프레임 안에 위젯들을 넣어보는 작업을 했습니다.

그리고 프레임 위젯의 장점 중 하나가, 중복되는 자식 위젯들의 속성 등 코드반복을 최소화할 수 있다고 했습니다.

그 부분의 예시를 하나 보여드리겠습니다.

아래와 같은 GUI가 하나 있습니다. 체크박스 5개를 세로로 배치한 tk창입니다.

코드는 아래와 같습니다.

import tkinter as tk
from tkinter import ttk

win = tk.Tk()
win.geometry("150x200")  # width(150) x height(200)

checkbutton_1 = ttk.Checkbutton(win, text="체크버튼_1")
checkbutton_1.grid(row=0)

checkbutton_2 = ttk.Checkbutton(win, text="체크버튼_2")
checkbutton_2.grid(row=1)

checkbutton_3 = ttk.Checkbutton(win, text="체크버튼_3")
checkbutton_3.grid(row=2)

checkbutton_4 = ttk.Checkbutton(win, text="체크버튼_4")
checkbutton_4.grid(row=3)

checkbutton_5 = ttk.Checkbutton(win, text="체크버튼_5")
checkbutton_5.grid(row=4)

win.mainloop()

 

그런데, 위 모든 체크버튼에다 padx=30, pady=10 속성을 추가하고 싶습니다. 아래처럼요.

어떻게 하죠? 각 체크버튼 다섯 개의 grid 안에다 직접 다섯 번 타이핑을 해야 하죠.

간단한 예제임에도 굉장히 번거롭습니다.

혹은 아래처럼 IDE의 기능을 활용할 수도 있죠.

그런데, 체크버튼들이 Frame 안에 들어 있으면?

Frame.winfo_children 메서드를 이용해서 for문으로 수정이 가능합니다.

아래처럼요. 최하단 mainloop 바로 위의 for문입니다.

import tkinter as tk
from tkinter import ttk

win = tk.Tk()

frame = ttk.Frame(win)
frame.grid(row=0, column=0, padx=20, pady=20)

checkbutton_1 = ttk.Checkbutton(frame, text="체크버튼_1")
checkbutton_1.grid(row=0)

checkbutton_2 = ttk.Checkbutton(frame, text="체크버튼_2")
checkbutton_2.grid(row=1)

checkbutton_3 = ttk.Checkbutton(frame, text="체크버튼_3")
checkbutton_3.grid(row=2)

checkbutton_4 = ttk.Checkbutton(frame, text="체크버튼_4")
checkbutton_4.grid(row=3)

checkbutton_5 = ttk.Checkbutton(frame, text="체크버튼_5")
checkbutton_5.grid(row=4)


for child in frame.winfo_children():
    child.grid_configure(padx=30, pady=10)

win.mainloop()

 

위 코드를 실행해보면

다섯 개의 체크버튼 위젯의 그리드 속성이 모두 변경된 것을 확인할 수 있습니다.

이런 식으로 winfo_children 메서드를 이용한 코딩이 무조건 좋다는 뜻은 아닙니다.
수작업이 적어지고 수정이 간편한 반면,
코드가 다소 복잡해져서 읽을 때 불편해질 수 있다는 단점도 있습니다.
취향 또는 케이스에 따라 적절히 판단하시기를 바랍니다.

 


다음 포스팅

2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 24. 상단에 메뉴바 붙이기

 

24. 상단에 메뉴바 붙이기

지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 23. 프레임 안의 위젯들 속성을 일괄변경하기 23. 프레임 안의 위젯들 속성을 일괄변경하기 지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집

martinii.fun

 

댓글