tkinter.Grid.grid 메서드
Widget 클래스를 상속하는 웨젯들은 Grid 클래스의 grid() 메서드 호출을 통해 해당 위젯의 위치를 설정할 수 있습니다.
아래 표는 grid() 메서드를 통해 설정 가능한 옵션을 나타냅니다.
column | number - use cell identified with given column (starting with 0) |
columnspan | number - this widget will span several columns |
in | master - use master to contain this widget |
in_ | master - see 'in' option description |
ipadx | amount - add internal padding in x direction |
ipady | amount - add internal padding in y direction |
padx | amount - add padding in x direction |
pady | amount - add padding in y direction |
row | number - use cell identified with given row (starting with 0) |
rowspan | number - this widget will span several rows |
sticky | NSEW - if cell is larger on which sides will this widget stick to the cell boundary |
부모 클래스의 아래 메서드를 사용하여 부모 클래스의 크기가 변경되었을 때 (예. 윈도우의 크기를 변경했을 때) 원하는 위치의 위젯 크기도 이에 반응하도록 할 수 있습니다.
w.columnconfigure(N, option=value, ...) | option = minsize , pad ,weight |
w.rowconfigure(N, option=value, ...) |
option = minsize , pad ,weight |
grid() 메서드로 원하는 위치에 위젯 배치하기
row, rowspan, column, columnspan, sticky, padx, pady
import tkinter as tk
class MainWin(tk.Tk):
def __init__(self, topic):
tk.Tk.__init__(self)
self.win_settings(topic)
self.tkinter_ttk_basics()
def win_settings(self, topic):
self.title(f'tkinter / {topic}')
self.geometry('480x320+200+200')
self.minsize(200, 200)
# -------------------------------------------------------------------------
def tkinter_ttk_basics(self):
self.count = int()
# row, column, rowspan, columnspan, sticky
self.create_label_and_grid() # 1, row=0, col=0
self.create_label_and_grid() # 2, row=1, col=0
self.create_label_and_grid(column=1) # 3, row=2, col=1
self.create_label_and_grid(column=2) # 4, row=3, col=2
self.create_label_and_grid(row=0, column=3) # 5, row=0, col=3
self.create_label_and_grid() # 6, row=4, col=0
self.create_label_and_grid(columnspan=2) # 7, row=5, col=0~1
self.create_label_and_grid(columnspan=2, sticky=tk.W) # 8, row=6, col=0~1
self.create_label_and_grid(columnspan=2, sticky=tk.E) # 9, row=7, col=0~1
self.create_label_and_grid(columnspan=2, sticky=tk.EW) # 10, row=8, col=0~1
self.create_label_and_grid(row=6, column=2, rowspan=2, sticky=tk.NS) # 11, row=6~7, col=2
self.create_label_and_grid(row=6, column=3, rowspan=3, sticky=tk.NS) # 12, row=6~8, col=3
# padx, pady
self.create_label_and_grid(padx=10, pady=10) #13, row=9, col=0
def create_label_and_grid(self, **kw):
self.count += 1
label = tk.Label(self, relief=tk.SUNKEN)
label.grid(**kw)
row = label.grid_info()['row']
col = label.grid_info()['column']
label.configure(text='Label {} ({}, {})'.format(self.count, row, col))
if __name__ == '__main__':
mainwin = MainWin('tkinter.Grid')
mainwin.mainloop()
1) MainWin 클래스의 create_label_and_grid() 메서드 호출을 통해 각 Label 객체를 생성하고 grid() 메서드를 실행합니다. create_label_and_grid() 메서드 없이 아래와 같이 코드를 작성해도 무방할 것입니다. (생성된 객체를 변수에 저장하지 않고 바로 grid() 메서드를 호출)
tk.Label(self, text='Label (x, y)', relief=tk.SUNKEN).grid(row=0, column=0)
2) 위의 파이썬 코드로는 윈도우 크기를 변경했을 때 위젯들의 크기는 변경되지 않습니다.
윈도우 크기 변경 시 위젯의 크기도 변경시키기
위에서 작성한 아래의 코드 다음에,
# padx, pady
self.create_label_and_grid(padx=10, pady=10) # 13 row=9, col=0
다음의 코드를 추가하면, column=3인 Label 5, 12, 14의 가로(x축) 길이가 변경됩니다. 또한 row=10인 Label 14의 세로(y축) 길이 또한 윈도우 크기의 변화에 반응하게 됩니다. columnconfigure 및 rowconfigure의 옵션 weight는 변경되는 크기의 비율을 의미합니다.
# rowconfigure, columnconfigure
self.create_label_and_grid(column=2, columnspan=2, sticky=tk.NSEW) # 14 row=10, col=2
self.columnconfigure(3, weight=1, minsize=50)
self.rowconfigure(10, weight=1)
'코딩 > 파이썬 tkinter' 카테고리의 다른 글
[Tkinter] 11장. Label (ttk) 2단계 (0) | 2020.11.08 |
---|---|
[Tkinter] 10장. Label 2단계 (0) | 2020.11.08 |
[Tkinter] 8장. Pack (0) | 2020.11.08 |
[Tkinter] 7장. Geometry Manager (0) | 2020.11.07 |
[Tkinter] 6장. Label (ttk) (0) | 2020.11.06 |