tkinter.Pack/Grid/Place
tkinter에는 아래와 같이 세 개의 geometry manager가 있습니다.
- tkinter.Pack 클래스
- tkinter.Grid 클래스
- tkinter.Place 클래스
다음과 같이 Geometry manager에 대한 설명은 조금 난해하나, 쉽게 말하여 Label이나 Button, 심지어 Frame 또는 Menu 등 화면에 보이는 대부분의 요소는 위젯으로 분류될 수 있으며, 각 위젯은 geometry manager에 의해 화면에 표시되는 위치가 정해집니다.
- A geometry manager that arranges the children of a parent by packing them in order around the edges of the parent
바꿔 말하면 임의 위젯을 생성한 후 geometry manager를 통해 화면에 표시되는 위치를 지정하지 않으면 해당 위젯은 보이지 않게 됩니다.
임의 위젯에 대하여 어떠한 geometry manager를 사용할지는 자유입니다.
아래 표를 통해 tkinter에 정의되어 있는 각 클래스가 어떤 클래스를 상속하는지 알 수 있습니다. 아래 표와 같이 대부분의 위젯이 Widget 클래스를 상속하며, Widget 클래스는 다시 geometry manager인 Pack, Grid, Place 클래스 모두를 상속하고 있습니다.
class BaseWidget(Misc): class BitmapImage(Image): class BooleanVar(Variable): class Button(Widget): class CallWrapper: class Canvas(Widget, XView, YView): class Checkbutton(Widget): class DoubleVar(Variable): class Entry(Widget, XView): class Event: class EventType(str, enum.Enum): class Frame(Widget): class Grid: class Image: class IntVar(Variable): class Label(Widget): class LabelFrame(Widget): class Listbox(Widget, XView, YView): class Menu(Widget): class Menubutton(Widget): class Message(Widget): class Misc: class OptionMenu(Menubutton): class Pack: class PanedWindow(Widget): class PhotoImage(Image): class Place: class Radiobutton(Widget): class Scale(Widget): class Scrollbar(Widget): class Spinbox(Widget, XView): class StringVar(Variable): class Text(Widget, XView, YView): class Tk(Misc, Wm): class Toplevel(BaseWidget, Wm): class Variable: class Widget(BaseWidget, Pack, Place, Grid): class Wm: class XView: class YView: class _setit: |
아래 그림과 같이 생성한 Label에 대해 geometry manager 중 하나의 Pack 클래스의 pack() 메서드를 호출하지 않으면, 관련된 Label은 화면에 보이지 않게 됩니다.
위 화면에 대한 파이썬 코드는 아래와 같습니다. 아래 코드와 같이 self.label2 및 self.label5 속성에 대해선 pack() 메서드를 호출하지 않았습니다.
import tkinter as tk
import tkinter.ttk as ttk
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.label1 = ttk.Label(self, text='기하학')
self.label1.pack()
self.label2 = ttk.Label(self, text='Geometry')
# self.label2.pack()
self.label3 = ttk.Label(self, text='선, 면, 도형 등 기하학적인 대상의 모양, 크기, 상대적인 위치')
self.label3.pack()
self.label4 = ttk.Label(self, text='그리고 공간의 성질에 대해 연구하는 수학의 한 갈래')
self.label4.pack()
self.label5 = ttk.Label(self, text='한자어 기하는 명나라의 서광계가 만든 단어')
# self.label5.pack()
# -------------------------------------------------------------------------
if __name__ == '__main__':
mainwin = MainWin('geometry')
mainwin.mainloop()
'코딩 > 파이썬 tkinter' 카테고리의 다른 글
[Tkinter] 9장. Grid (0) | 2020.11.08 |
---|---|
[Tkinter] 8장. Pack (0) | 2020.11.08 |
[Tkinter] 6장. Label (ttk) (0) | 2020.11.06 |
[Tkinter] 5장. Label (0) | 2020.11.05 |
[Tkinter] 4장. Tk를 상속하는 MainWin 클래스 (0) | 2020.11.05 |