Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 제목 표시줄 없이 크기 조절 가능한 창 만드는 방법

Tkinter에서 제목 표시줄(title bar)이 없는 창을 만들려면 overrideredirect(True) 속성을 사용하면 됩니다. 이 속성은 창 상단의 탐색 패널, 즉 제목 표시줄을 비활성화하여 테두리 없는 깔끔한 창을 구현할 수 있게 해줍니다.

다만 이 방법에는 한 가지 단점이 있습니다. 제목 표시줄이 사라지면 기본적으로 창의 크기를 마우스로 조절할 수 없게 된다는 점입니다.

제목 표시줄 없이도 크기 조절이 가능한 창을 프로그래밍 방식으로 만들어야 한다면, Tkinter에서 제공하는 Sizegrip(parent) 위젯을 활용할 수 있습니다. Sizegrip 위젯은 애플리케이션에 확장 기능을 추가해 주며, 사용자가 그립(grip)을 잡아당겨 메인 창의 크기를 자유롭게 변경할 수 있도록 해줍니다.

Sizegrip 위젯을 실제로 동작하게 하려면 마우스 버튼 이벤트를 바인딩(bind)하고, 그립을 당길 때마다 창 크기를 다시 계산하는 함수를 연결해 주어야 합니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk

# tkinter 프레임 또는 윈도우 인스턴스 생성
win=Tk()

# 창 크기 설정
win.geometry("700x350")

# 창의 제목 표시줄 제거
win.overrideredirect(True)

# 창 크기를 조절하는 함수 정의
def moveMouseButton(e):
    x1=winfo_pointerx()
    y1=winfo_pointery()
    x0=winfo_rootx()
    y0=winfo_rooty()

    win.geometry("%s x %s" % ((x1-x0),(y1-y0)))

# 레이블(Label) 위젯 추가
label=Label(win,text="오른쪽 하단 모서리를 잡아당기면 창 크기가 조절됩니다")
label.pack(side="top", fill="both", expand=True)

# 창 크기 조절용 그립 추가
grip=ttk.Sizegrip()
grip.place(relx=1.0, rely=1.0, anchor="se")
grip.lift(label)
grip.bind("", moveMouseButton)

win.mainloop()

코드 설명

winfo_pointerx()winfo_pointery()는 현재 마우스 포인터의 화면상 좌표를 반환하고, winfo_rootx()winfo_rooty()는 창의 왼쪽 상단 모서리 좌표를 반환합니다. 두 값의 차이를 계산하면 현재 창의 너비와 높이를 알 수 있으며, 이를 geometry() 메서드에 적용하여 실시간으로 창 크기를 갱신하게 됩니다.

그립은 place(relx=1.0, rely=1.0, anchor="se")를 통해 창의 오른쪽 하단에 배치되며, <B1-Motion> 이벤트(마우스 왼쪽 버튼을 누른 채 드래그하는 동작)가 발생할 때마다 moveMouseButton 함수가 호출되어 창 크기가 업데이트됩니다.

실행 결과

위 코드를 실행하면 제목 표시줄이 전혀 없는 창이 화면에 나타납니다. 이 창은 오른쪽 하단 모서리의 그립을 마우스로 잡아당기면 자유롭게 크기를 조절할 수 있습니다.