지난 포스팅
2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 22. 프레임 위젯 - 위젯들을 묶어주는 위젯
이번 포스팅에서는 : 프레임의 자식위젯 속성 일괄변경
지난 포스팅에서 (레이블)프레임 안에 위젯들을 넣어보는 작업을 했습니다.
그리고 프레임 위젯의 장점 중 하나가, 중복되는 자식 위젯들의 속성 등 코드반복을 최소화할 수 있다고 했습니다.
그 부분의 예시를 하나 보여드리겠습니다.
아래와 같은 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. 상단에 메뉴바 붙이기
'GUI 튜토리얼 > tkinter 한꼬집씩만 따라해보기' 카테고리의 다른 글
24. 상단에 메뉴바 붙이기 (0) | 2022.11.20 |
---|---|
22. 프레임 위젯 - 위젯들을 묶어주는 위젯 (0) | 2022.11.20 |
21. 스크롤바 기본제공 텍스트 위젯 - Scrolledtext (0) | 2022.11.18 |
댓글