🧽Python/UI\그래픽스

파이썬 UI/그래픽스 | 1. 윈도우와 라벨

Mawile 2021. 10. 19.
728x90

저번 글(파이썬 UI/그래픽스 | 0. 라이브러리 설치 및 시작하기)에 이어서

이번 포스팅에는 윈도우와 라벨에 관하여 포스팅하겠습니다.

 

대략적으로 이번 포스팅에서 배울 내용을 요약하자면,

tkinter에서의 윈도우창에윈도 창에 관한 내용과 윈도 창에 문자를 집어넣을 수 있는 라벨에 관한 내용입니다.

 

그러면 딴소리말고 바로 시작하겠습니다.

 

0. 윈도우

우선 우리는 저번 시간에서 기본적인 윈도 창을 생성해보기만 했었습니다.

import tkinter

def windowOptions(win):
    pass

def CanvasSettings(win):
    pass

def main():
    win = tkinter.Tk()
    
    windowOptions(win)
    CanvasSettings(win)
    
    win.mainloop()

if __name__ == '__main__':
    main()

 

이번 시간에는 살짝 코드 가독성을 증가시키기 위해서 구역을 명확하게 나누겠습니다.

 

0-0. 윈도-제목

우선 윈도의 제목을 바꾸기 위해서는 다음과 같이 사용합니다.

win = tkinter.Tk()
제목 = '제목'
win.title(제목)

 

실제 사용해보면서 알려드리겠습니다.

import tkinter

# 윈도우창 옵션설정
def windowOptions(win):
    win.title('myTkinter - mawile') # 제목

# 실제 윈도우창에 들어가는 요소 설정
def CanvasSettings(win):
    pass

def main():
    win = tkinter.Tk()
    
    windowOptions(win)
    CanvasSettings(win)
    
    win.mainloop()

if __name__ == '__main__':
    main()

 

실행해보면 이런 식으로 윈도 창이 생성되어서 나옵니다.

 

 

저가 설정했던 제목 그대로 나왔습니다!

크게 별 내용 아니기 때문에 빠르게 다음으로 넘어가겠습니다.

 

 

0-1. 윈도-크기

파이썬 tkinter에서 윈도의 크기 설정은 살짝 독특하게 되어있습니다. 바로 알아보도록 하겠습니다.

win = tkinter.Tk()

width = 900
height = 780
x = 0
y = 100

win.geometry(f'{width}x{height}+{x}+{y}')

 

자... 실제 사용 코드를 알려드리자면,,,

저는 다음과 같이 설계했습니다.

 

import tkinter

# 윈도우창 옵션설정
def windowOptions(win):
    # 윈도우의 제목설정
    win.title('myTkinter - mawile')

    # 윈도우의 크기설정
    width = 900
    height = 780
    x = 0
    y = 0
    win.geometry(f'{width}x{height}+{x}+{y}')

# 실제 윈도우창에 들어가는 요소 설정
def CanvasSettings(win):
    pass

def main():
    win = tkinter.Tk()
    
    windowOptions(win)
    CanvasSettings(win)
    
    win.mainloop()

if __name__ == '__main__':
    main()

 

실제 실행해보면?!

 

 

음... 육안으로 보기에도 크기가 알맞게 커졌습니다.

여기서 혼동하시는 분들을 위해서 짤막하게 추가 설명하자면,

위에서 쓰인 x, y에 관한 좌표

우리가 현재 보고 있는 컴퓨터 모니터 스크린에 대한 절대좌표를 뜻합니다.

 

이것도 크게 어려운 점은 없었습니다.

바로 다음으로 넘어가겠습니다.

 

1. 라벨

우선 라벨은 윈도 창에서 문자나 이미지, 비트 맵등을 첨부할 수 있습니다.

우선 다음과 같은 형식으로 사용할 수 있습니다.

 

win = tkinter.Label(parent, option, ...)

 

그리고 파라미터는 이런 식으로 구성되어 있습니다.

 

으어!!!! 표만드느라 죽는줄 알았네!!!!!!!!!!!!@@@
으어!!!! 표만드느라 죽는줄 알았네!!!!!!!!!!!!@@@

 

 

(오.... 표 만드느라 죽는 줄 알았네)

대략적인 파라미터들입니다.

 

이제 정확하게 사용방법에 관하여 몇 가지를 사용해보겠습니다.

 

label1 = tkinter.Label(text = 'Hello Tkinter!') # 설정
label1.pack() # 화면에 출력

다음과 같이 사용하면 text파라미터를 사용한 제일 기본적인 라벨의 사용방법입니다.

 

하지만.. 저는 이런 거 말고 좀 더 화려하게 하고 싶습니다..

그래서 여러 가지 다채롭게 파라미터들을 사용하겠습니다.

 

 

import tkinter
import PIL.Image
import PIL.ImageTk

# 윈도우창 옵션설정
def windowOptions(win):
    # 윈도우의 제목설정
    win.title('myTkinter - mawile')

    # 윈도우의 크기설정
    width = 900
    height = 780
    x = 0
    y = 0
    win.geometry(f'{width}x{height}+{x}+{y}')

# 실제 윈도우창에 들어가는 요소 설정
def CanvasSettings(win):
    # 배경색과 글자색을 조절
    label1 = tkinter.Label(win, text = '배경색과 글자색조절!', background = 'green', foreground = 'white')

    # 화면에 출력
    label1.pack()

    # 라벨의 좌표와 텍스트를 조절
    label2 = tkinter.Label(win, text = '좌표와 마우스커서를 조절!', cursor = 'iron_cross') # 마우스커서 이미지표는 밑에서 참조바랍니다.
    label2.place(x = 100, y = 100)

    # 경계선이 존재하는 비트맵텍스트
    label3 = tkinter.Label(win, text = '경계선이 존재하는 비트맵텍스트!', relief = 'solid', compound = 'top', bitmap = 'question')
    label3.pack()

    # 이미지 라벨
    pil_img = PIL.Image.open('py.png') # PIL라이브러리로 이미지열기
    pil_img = pil_img.resize((100, 100)) # 이미지가 너무 커서 크기조절좀 했습니다.
    img = PIL.ImageTk.PhotoImage(pil_img) # Tkinter형식의 이미지로 변환
    label4 = tkinter.Label(win, image = img)
    label4.image = img # 레버런스 유지
    label4.pack()

def main():
    win = tkinter.Tk()
    
    windowOptions(win)
    CanvasSettings(win)
    
    win.mainloop()

if __name__ == '__main__':
    main()
arrow man
based_arrow_down middlebutton
based_arrow_up mouse
boat pencil
bogosity pirate
bottom_left_corner plus
bottom_right_corner question_arrow
bottom_side right_ptr
bottom_tee right_side
box_spiral right_tee
center_ptr rightbutton
circle rtl_logo
clock sailboat
coffee_mug sb_down_arrow
cross sb_h_double_arrow
cross_reverse sb_left_arrow
crosshair sb_right_arrow
diamond_cross sb_up_arrow
dot sb_v_double_arrow
dotbox shuttle
double_arrow sizing
draft_large spider
draft_small spraycan
draped_box star
exchange target
fleur tcross
gobbler top_left_arrow
gumby top_left_corner
hand1 top_right_corner
hand2 top_side
heart top_tee
icon trek
iron_cross ul_angle
left_ptr umbrella
left_side ur_angle
left_tee watch
leftbutton xterm
ll_angle X_cursor
lr_angle  

 

 

실제 코드를 실행해보면 다음과 같이 나옵니다.

 

저가 사용한 "py.png"파일은 아래다가 첨부해놓았습니다.

py.png
0.03MB

 

 

다음은 라벨의 폰트를 조절할 수 있는 방법입니다.

라벨에서 폰트를 사용하기 위해서는 다음과 같은 모듈을 import 해야 합니다.

import tkinter.font

 

그리고 기본적인 사용법입니다.

myFont = tkinter.font.Font(parameter, ...)
tkinter.Label(font = myFont)

 

폰트에 대한 모든 파라미터는 다음 표로 확인해주시길 바랍니다.

family 문자열의 글꼴 패밀리 이름입니다.
size 글꼴 높이(포인트 단위)입니다.
weight 굵은 글씨의 경우 'bold', 일반 무게의 경우 'normal'입니다.
slant 이탈릭체는 'bland', 일반은 'roman'입니다.
underline 밑줄 친 텍스트의 경우 1이고, 보통 텍스트의 경우 0입니다.
overstrike 지나치게 강조된 텍스트의 경우 1이고 정규 텍스트의 경우 0입니다.

 

저는 이런 식으로 설계했습니다.

 

import tkinter
import tkinter.font

# 윈도우창 옵션설정
def windowOptions(win):
    # 윈도우의 제목설정
    win.title('myTkinter - mawile')

    # 윈도우의 크기설정
    width = 900
    height = 780
    x = 0
    y = 0
    win.geometry(f'{width}x{height}+{x}+{y}')

# 실제 윈도우창에 들어가는 요소 설정
def CanvasSettings(win):
    # 라벨의 폰트를 조절
    myFont_underlineBold = tkinter.font.Font(family= '바탕체', size = 15, underline = 1, weight = 'bold')
    myFont_overstrikeItalic = tkinter.font.Font(family= '바탕체', size = 15, overstrike = 1, slant = 'italic')
    
    label1 = tkinter.Label(win, text = '라벨의 폰트를 조절 - 언더라인!', font = myFont_underlineBold)
    label2 = tkinter.Label(win, text = '라벨의 폰트를 조절 - 오버스트라이크!', font = myFont_overstrikeItalic)

    # 화면에 출력
    label1.pack()
    label2.pack()

def main():
    win = tkinter.Tk()
    
    windowOptions(win)
    CanvasSettings(win)
    
    win.mainloop()

if __name__ == '__main__':
    main()

 

실제 실행을 시켜보겠습니다.

 

 

다음과 같이 라벨의 텍스트에 폰트 적용이 정상적으로 적용이 되었습니다.

폰트는 텍스트의 형식이나 크기를 조절하고 싶을 때 사용하면 좋겠습니다!

 

마지막으로 라벨의 textvariable에 관한 내용입니다.

textvariable은 살짝 특이하면서 (개인적으로) 제일 흥미로운 파라미터입니다.

동적으로 라벨의 텍스트 값을 조절하는 것이 가능합니다!

딴소리 말고 바로 설계해보도록 하겠습니다.

 

import tkinter
import tkinter.font

def ConvertTextVariable(textvar, convstr):
    textvar.set(convstr)

# 윈도우창 옵션설정
def windowOptions(win):
    # 윈도우의 제목설정
    win.title('myTkinter - mawile')

    # 윈도우의 크기설정
    width = 900
    height = 780
    x = 0
    y = 0
    win.geometry(f'{width}x{height}+{x}+{y}')

# 실제 윈도우창에 들어가는 요소 설정
def CanvasSettings(win):
    # 라벨의 폰트를 조절
    myFont_underlineBold = tkinter.font.Font(family= '바탕체', size = 15, underline = 1, weight = 'bold')
    myFont_overstrikeItalic = tkinter.font.Font(family= '바탕체', size = 15, overstrike = 1, slant = 'italic')
    
    label1 = tkinter.Label(win, text = '라벨의 폰트를 조절 - 언더라인!', font = myFont_underlineBold)
    label2 = tkinter.Label(win, text = '라벨의 폰트를 조절 - 오버스트라이크!', font = myFont_overstrikeItalic)

    # 화면에 출력
    label1.pack()
    label2.pack()

    textvar = tkinter.StringVar()
    label3 = tkinter.Label(win, text = '초기값', textvariable = textvar)
    label3.pack()

    ConvertTextVariable(textvar, '멍멍!')

def main():
    win = tkinter.Tk()
    
    windowOptions(win)
    CanvasSettings(win)
    
    win.mainloop()

if __name__ == '__main__':
    main()

 

저는 코드 가독성을 위하여 "ConvertTextVariable"이라는 함수를 따로 만들었는데,

이 함수는 첫 번째 인자로 들어오는 tkinter.StringVar() 객체에 대한 값을 두 번째 인자의 문자열 내용으로 변환합니다.

 

그냥 크게 특별한 기능은 없고 그냥 tkinter.StringVar().set() 패킹한 함수입니다.

실제 실행해보면 다음과 같이 "초기값" 이 나오는 것이 아닌 후에 변경한 "멍멍!"으로 나옵니다~!

 

 

 

이로써 윈도와 라벨에 관한 내용은 여기서 마치겠습니다.

다음 시간에는 버튼과 프레임에 관하여 포스팅하겠습니다.

 

그럼 안녕~!!!!@@

 


728x90

댓글