Python/Python tkinter

Python tkinter : Label (라벨, 문자 띄우기)

CosmosProject 2022. 5. 17. 19:23
728x90
반응형

 

 

 

tkinter의 Label은 Window에 텍스트를 보여주는 역할을 합니다.

텍스트를 담아서 보여주는 박스라고 생각하면 됩니다.

 

간단한 사용법을 먼저 알아보고 Label method에 적용할 수 있는 여러 옵션들을 알아봅시다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label')
label.place(x=0, y=0)

window.mainloop()

 

 

위 코드를 실행한 결과입니다.

Window의 왼쪽 위에 Test label이라는 문자가 생겼습니다.

 

이렇게 Window에 텍스트를 띄워주는 것이 Label method의 기능입니다.

 

 

이제 Label method를 어떻게 사용했는지를 알아봅시다.

 

- label = tk.Label(window, text='Test label')

Label을 이용하려면 먼저 tkinter의 Label을 이용해서 Label 객체를 만들어야 합니다.

Label 객체를 만들기 위해선 위처럼 기본적으로 2가지 인자가 주어져야합니다.

첫 번째 인자인 window는 window 객체입니다. Label은 Window 내부에 표시되어야하니까 Label이 속할 window 객체를 전달한다고 보면 됩니다.

 

두 번째 인자는 text 옵션입니다.

이것은 이미 감이 잡히셨을 것 같은데 Label에 표시해줄 텍스트를 전달하는 옵션입니다.

 

 

- label.place(x=0, y=0)

Label 객체를 생성한 후 이것을 Window의 어디에 표시해줘야할지를 정해야겠지요.

따라서 생성한 label 객체에 place method를 이용해서 Label이 표시될 위치를 지정해줘야 합니다.

place method에는 위처럼 Label을 특정 위치에 표시해줍니다..

 

x좌표는 가로 위치이고, y좌표는 세로 위치입니다.

한 가지 주의할 것은 Window에서 왼쪽 위가 원점입니다.

그리고 오른쪽으로 갈수록 x좌표값이 커지고

아래쪽으로 내려갈수록 y좌표값이 커지게됩니다.

 

또한 place method에 적힌 x, y좌표의 기준점은 Label의 왼쪽 위 꼭지점입니다.

즉, Window 기준으로 x = 0, y = 0 위치에 Label의 왼쪽 위 꼭지점이 오도록 Label을 그리겠다는 것이지요.

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label')
label.place(x=10, y=20)

window.mainloop()

 

 

place method의 인자를 x=10, y=20으로 바꾼 결과입니다.

보시면 Label의 위치가 오른쪽 아래로 이동한 것을 볼 수 있습니다.

y=20이기 때문에 오른쪽으로 이동한 것 보다 아래쪽으로 더 많이 이동한걸 볼 수 있습니다.

 

 

 

 

 

 

 


 

 

 

 

 

 

 

여기까지해서 Label을 사용하기 위한 아주 기본적인 내용을 살펴보았습니다.

 

이제 Label을 더 세련되게 사용할 수 있도록 해주는 여러가지 옵션들을 알아보겠습니다.

 

여러 옵션들을 정리해보면 아래와 같습니다. (사실 더 많은 옵션들이 있지만 비교적 자주 사용되는 옵션들만 적어두었습니다.)

 

옵션 기능
text='Show text' Label에 표시할 text 지정
font=('style', size) 글씨체와 글씨크기 설정
foreground='color' 글씨 색상 설정 (값 예시 = 'white', '#eeeeee')
backgound='color' Label 배경 색 설정 (값 예시 = 'white', '#eeeeee')
highlightthickness=integer Label hightlight 두께 (Label의 테두리 두께)
hightlightbackground='color' Label hightlight 색상 (Label의 테두리 색상)
borderwidth=integer Label 테두리 두께
relief='flat' Label 테두리 모양 (flat, solid, froove, raised, ridge, sunken)
width=integer Label의 가로 길이
height=interger Label의 세로 길이

 

 

 

 

 

 

 

1. font

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 font=('Arial', 30))
label.place(x=0, y=0)

window.mainloop()

 

 

 

font 옵션을 정했습니다.

 

- font=('Arial', 30)

font 옵션에는 tuple 형태의 값을 전달해야합니다.

tuple의 첫 번째 요소는 글씨체를 의미합니다. 저는 Arial로 설정했습니다.

tuple의 두 번째 요소는 글씨 크기를 의미합니다. 위 예시에서는 글씨 크기를 30으로 설정했습니다.

 

 

 

 

import tkinter as tk
import tkinter.font as font

window = tk.Tk()
print(font.families())


-- Result
('GungSeo', 'Nanum Gothic', 'Nanum Myeongjo', 'Nanum Brush Script', 'Nanum Pen Script', 'BM Kirang Haerang', 'BM Dohyeon', 'BM Yeonsung', 'BM Jua', 'BM Hanna 11yrs Old', 'BM Hanna Air', 'BM Hanna Pro', 'PilGi', 'HeadLineA', 'Academy Engraved LET', 'Al Bayan', 'Al Nile', 'Al Tarikh', 'American Typewriter', 'Andale Mono', 'Apple Braille', 'Apple Chancery', 'Apple Color Emoji', 'Apple LiGothic', 'Apple LiSung', 'Apple SD Gothic Neo', 'Apple Symbols', 'AppleGothic', 'AppleMyungjo', 'Arial', 'Arial Black', 'Arial Hebrew', 'Arial Hebrew Scholar', 'Arial Narrow', 'Arial Rounded MT Bold', 'Arial Unicode MS', 'Avenir', 'Avenir Next', 'Avenir Next Condensed', 'Ayuthaya', 'Baghdad', 'Bangla MN', 'Bangla Sangam MN', 'Baoli SC', 'Baoli TC', 'Baskerville', 'Beirut', 'BiauKai', 'Big Caslon', 'Bodoni 72', 'Bodoni 72 Oldstyle', 'Bodoni 72 Smallcaps', 'Bodoni Ornaments', 'Bradley Hand', 'Brush Script MT', 'Chalkboard', 'Chalkboard SE', 'Chalkduster', 'Charter', 'Cochin', 'Comic Sans MS', 'Copperplate', 'Corsiva Hebrew', 'Courier New', 'Damascus', 'DecoType Naskh', 'Devanagari MT', 'Devanagari Sangam MN', 'Didot', 'DIN Alternate', 'DIN Condensed', 'Diwan Kufi', 'Diwan Thuluth', 'Euphemia UCAS', 'Farah', 'Farisi', 'Futura', 'Galvji', 'GB18030 Bitmap', 'Geeza Pro', 'Geneva', 'Georgia', 'Gill Sans', 'Grantha Sangam MN', 'Gujarati MT', 'Gujarati Sangam MN', 'Gurmukhi MN', 'Gurmukhi MT', 'Gurmukhi Sangam MN', 'Hannotate SC', 'Hannotate TC', 'HanziPen SC', 'HanziPen TC', 'Hei', 'Heiti SC', 'Heiti TC', 'Helvetica', 'Helvetica Neue', 'Herculanum', 'Hiragino Maru Gothic ProN', 'Hiragino Mincho ProN', 'Hiragino Sans', 'Hiragino Sans CNS', 'Hiragino Sans GB', 'Hoefler Text', 'Impact', 'InaiMathi', 'ITF Devanagari', 'ITF Devanagari Marathi', 'Kai', 'Kailasa', 'Kaiti SC', 'Kaiti TC', 'Kannada MN', 'Kannada Sangam MN', 'Kefa', 'Khmer MN', 'Khmer Sangam MN', 'Klee', 'Kohinoor Bangla', 'Kohinoor Devanagari', 'Kohinoor Gujarati', 'Kohinoor Telugu', 'Kokonor', 'Krungthep', 'KufiStandardGK', 'Lantinghei SC', 'Lantinghei TC', 'Lao MN', 'Lao Sangam MN', 'Libian SC', 'Libian TC', 'LiHei Pro', 'LingWai SC', 'LingWai TC', 'LiSong Pro', 'Lucida Grande', 'Luminari', 'Malayalam MN', 'Malayalam Sangam MN', 'Marker Felt', 'Menlo', 'Microsoft Sans Serif', 'Mishafi', 'Mishafi Gold', 'Monaco', 'Mshtakan', 'Mukta Mahee', 'Muna', 'Myanmar MN', 'Myanmar Sangam MN', 'Nadeem', 'New Peninim MT', 'Noteworthy', 'Noto Nastaliq Urdu', 'Noto Sans Kannada', 'Noto Sans Myanmar', 'Noto Sans Oriya', 'Noto Serif Myanmar', 'Optima', 'Oriya MN', 'Oriya Sangam MN', 'Osaka', 'Palatino', 'Papyrus', 'Party LET', 'PCMyungjo', 'Phosphate', 'PingFang HK', 'PingFang SC', 'PingFang TC', 'Plantagenet Cherokee', 'PSL Ornanong Pro', 'PT Mono', 'PT Sans', 'PT Sans Caption', 'PT Sans Narrow', 'PT Serif', 'PT Serif Caption', 'Raanana', 'Rockwell', 'Sana', 'Sathu', 'Savoye LET', 'Shree Devanagari 714', 'SignPainter', 'Silom', 'SimSong', 'Sinhala MN', 'Sinhala Sangam MN', 'Skia', 'Snell Roundhand', 'Songti SC', 'Songti TC', 'STFangsong', 'STHeiti', 'STIXGeneral', 'STIXIntegralsD', 'STIXIntegralsSm', 'STIXIntegralsUp', 'STIXIntegralsUpD', 'STIXIntegralsUpSm', 'STIXNonUnicode', 'STIXSizeFiveSym', 'STIXSizeFourSym', 'STIXSizeOneSym', 'STIXSizeThreeSym', 'STIXSizeTwoSym', 'STIXVariants', 'STKaiti', 'STSong', 'Sukhumvit Set', 'Symbol', 'Tahoma', 'Tamil MN', 'Tamil Sangam MN', 'Telugu MN', 'Telugu Sangam MN', 'Thonburi', 'Times New Roman', 'Toppan Bunkyu Gothic', 'Toppan Bunkyu Midashi Gothic', 'Toppan Bunkyu Midashi Mincho', 'Toppan Bunkyu Mincho', 'Trattatello', 'Trebuchet MS', 'Tsukushi A Round Gothic', 'Tsukushi B Round Gothic', 'Verdana', 'Waseem', 'Wawati SC', 'Wawati TC', 'Webdings', 'Weibei SC', 'Weibei TC', 'Wingdings', 'Wingdings 2', 'Wingdings 3', 'Xingkai SC', 'Xingkai TC', 'Yuanti SC', 'Yuanti TC', 'YuGothic', 'YuKyokasho', 'YuKyokasho Yoko', 'YuMincho', 'YuMincho +36p Kana', 'Yuppy SC', 'Yuppy TC', 'Zapf Dingbats', 'Zapfino')

 

위처럼 tkinter window 객체를 생성한 후

tkinter.font를 import해서 families라는 것을 출력해보면 현재 본인이 사용하는 OS에서 사용 가능한 글씨체 리스트를 출력해줍니다.

 

Font는 운영체제나 사용 환경에 따라 다를 수 있습니다.

따라서 가장 보편적인 font를 사용하는 것이 가장 좋습니다.

 

 

 

 

 

 

 

2. foreground

 

foreground 옵션을 이용해서 글자의 색상을 바꿔봅시다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 foreground='blue')
label.place(x=0, y=0)

window.mainloop()

 

 

- foreground='blue'

foreground를 blue로 설정했기 때문에 텍스트도 파란색으로 바뀐 것을 볼 수 있습니다.

 

 

 

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 foreground='#a800ad')
label.place(x=0, y=0)

window.mainloop()

 

 

blue, red처럼 단순히 어떤 색상을 전달하는게 아니라 위처럼 hex color 번호를 전달해도 됩니다.

 

Google 색상 선택 도구

 

위 링크를 클릭하면 Google에서 제공하는 색상 선택 도구를 이용할 수 있습니다.

색상을 선택하면 그에 대응하는 hex color, RGB, CMYK, HSV, HSL 컬러들의 수치를 얻을 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

3. background

 

이번에는 Label의 배경색을 설정해봅시다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 background='gray')
label.place(x=0, y=0)

window.mainloop()

 

 

 

- background='gray'

설정은 간단합니다.

background 옵션에 원하는 색상을 전달하면 됩니다.

 

 

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 background='#d485ff')
label.place(x=0, y=0)

window.mainloop()

 

 

- background='#d485ff'

마찬가지로 hex color값을 전달할 수도 있습니다.

 

 

 

 

 

 

4. highlightthickness & highlightbackground

 

highlightthickness -> Label의 바깥테두리 두께를 지정합니다.

highlightbackground -> Label의 바깥테두리 색상을 지정합니다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 background='#d485ff',
                 highlightthickness=4,
                 highlightbackground='blue'
                 )
label.place(x=0, y=0)

window.mainloop()

 

 

위 코드를 실행한 결과입니다.

Label의 바깥쪽에 파란색 테두리가 생겼습니다.

 

- highlightthickness=4,
- highlightbackground='blue'

이것은 바로 위 2개 옵션에 의한 결과입니다.

두께가 4이고 색상이 blue인 테두리를 생성한것이죠.

 

 

 

 

 

 

 

 

 

 

5. borderwidth & relief

 

borderwidth, relief도 Label의 테두리를 설정해줍니다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 background='#d485ff',
                 borderwidth=5,
                 relief='solid'
                 )
label.place(x=0, y=0)

window.mainloop()

 

 

결과를 보면 Label의 테두리에 검은색 테두리가 생겼습니다.

 

- borderwidth=5

테두리 두께를 설정합니다.


- relief='solid'

테두리 형태를 설정합니다.

 

 

 

 

 

 

 

 

6. width, height

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 background='#d485ff',
                 width=10,
                 height=15
                 )
label.place(x=0, y=0)

window.mainloop()

 

 

width는 label의 가로길이를 지정합니다.

height은 label의 세로길이를 지정합니다.

 

위 예시는 width=10, height=15로 설정한 결과입니다.

 

 

 

 

 

 

 


 

 

 

 

Label.pack

 

 

지금까지 Label을 Window에 배치할 때 place method를 이용했었습니다.

그래서 Window의 어떤 x, y 좌표에 Label의 왼쪽 위 꼭지점이 오도록 배치시켰죠.

 

근데 프로그래밍을 하다보면 Label이 Window 테두리로부터 일정 간격 이상 접근하지 못하도록 해야할 때가 있습니다.

 

그럴 땐 pack method를 사용합니다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 background='#d485ff',
                 )
label.pack()

window.mainloop()

 

 

place method를 없애고 대신 pack method를 사용한 결과입니다.

 

그 결과를 보면 Label이 Window의 가운데 상단에 표시되어있습니다.

 

pack은 기본적으로 위처럼 Label을 가장 상단에 표시해줌과 동시에 Window의 정 중앙에 표시해줍니다.

 

 

그래서 위처럼 Window의 크기를 줄여도 Label은 Window 가로길이 중앙에 표시되죠.

 

 

 

 

 

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 background='#d485ff',
                 )
label.pack(padx=100)

window.mainloop()

 

 

 

 

pack method에는 padx라는 값을 설정할 수 있습니다.

이 값은 x축에서의 padding을 의미합니다.

 

- padx = 100

위 예시를 보면 padx값이 100으로 설정되어있습니다.

 

결과를 보면 이전과 크게 달라진 것이 없는거같지만 한번 Window의 가로길이를 마우스로 드래그해서 줄여봅시다.

 

 

Window의 가로길이가 일정 수준 이상으로 줄어들게되면 위처럼 Label이 잘리게됩니다.

 

왜일까요?

 

그것은 바로 padx=100 옵션에 있습니다.

pack은 Label을 나타내줄 때 Label의 테두리와 Window 테두리와의 최소 간격(padding)을 지정합니다.

 

padx=100의 의미는 Label과 Window 테두리 사이에는 100픽셀만큼의 간격이 반드시 존재해야한다는 의미입니다.

 

따라서 Window의 가로길이를 마우스로 계속 줄여도 Label과 Window 사이의 간격이 100픽셀 존재해야하는 것이죠.

 

좀 더 보기쉽게 표시해보면 위 이미지에서 빨간색 선으로 표시된 두께가 100픽셀입니다.

Label과 Window 테두리 사이의 여백(padding)을 100픽셀 유지하기 위해 Label이 잘려서 보이게 되는 것이지요.

 

 

 

padx가 x축 여백(padding)을 지정한다면 pady는 y축 여백(padding)을 지정합니다.

 

 

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='Test label',
                 background='#d485ff',
                 )
label.pack(padx=100, pady=100)

window.mainloop()

 

 

pady=100으로 설정한 결과입니다.

 

 

좀 더 보기쉽게 표시하면 빨간색으로 표시된 부분이 y축 padding인 100픽셀입니다.

pack method가 Label을 표시할 때에는 기본적으로 최대한 위쪽으로 정렬을 맞추기 때문에 먼저 위쪽 padding이 100이 적용됩니다.

 

 

 

이 상태에서 Window의 세로길이를 마우스로 드래그하여 점점 줄여봅시다.

그러다가 어느 정도 이상으로 줄이게되면 마찬가지로 Label이 잘려서 보이게 됩니다.

 

이 또한 위처럼 pady=100 설정의 결과입니다.

Window의 크기가 일정 수준 이상으로 줄어들면 y축 padding 100을 유지하기 위해 Label이 잘려보이게 되는 것이죠.

 

 

 

 

 

 

 


 

 

 

 

 

 

Label.config

Label을 이용하다보면 Label의 속성을 바꿔야 할 상황이 옵니다.

예를 들어 Label에 표시되는 텍스트를 바꾼다던지, Label에 표시되는 글씨의 색상을 바꾼다던지 등의 변경이 필요한 상황이 오곤 하죠.

 

이런 경우에는 Label.config method를 사용할 수 있습니다.

 

config method는 위에서 다뤘던 Label의 여러 옵션들을 새로 설정하는 역할을 해줍니다.

 

 

 

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='This is Label.')
label.place(x=0, y=0)
label.config(text='New Text')

window.mainloop()

 

 

위 코드를 실행시킨 결과입니다.

 

- label = tk.Label(window, text='This is Label.')

Label 객체 생성 과정을 보면 분명히 text옵션에 This is Label.이라는 문자가 할당되고 있습니다.

 

근데 결과를 보면 New Text라는 글자가 띄워져있죠.

 

 

- label.config(text='New Text')

그 이유는 바로 config method가 Label의 text 옵션을 New Text로 바꿨기 때문입니다.

 

 

 

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='This is Label.')
label.place(x=0, y=0)
label.config(background='gray')

window.mainloop()

 

 

위 예시는 config method를 이용해서 background 색상을 바꾸는 예시입니다.

 

- label = tk.Label(window, text='This is Label.')

Label 객체생성 부분에는 background 옵션 설정 부분이 없습니다.

 

 

- label.config(background='gray')

하지만 config method에서 backround를 설정하고 있죠.

 

 

이렇게 config method는 Label의 설정값들을 변경해주는 역할을 합니다.

 

 

 

 

 

 

 

다음은 config method를 Button과 함께 이용한 예시입니다.

 

import tkinter as tk

window = tk.Tk()
window.geometry('500x400')

label = tk.Label(window, text='This is Label.')
label.place(x=0, y=0)

def change_text():
    label.config(text='New text')

button = tk.Button(window, text='click', command=change_text)
button.place(x=0, y=30)

window.mainloop()

 

 

위 코드를 실행하면 Label과 Button이 하나씩 보이게 됩니다.

 

여기서 버튼을 클릭해봅시다.

 

 

그러면 위처럼 Label의 text가 New text 로 바뀌게 됩니다.

 

def change_text():
    label.config(text='New text')

button = tk.Button(window, text='click', command=change_text)

 

이렇게 Label의 텍스트가 바뀌게 되는 기능은 바로 위 부분에서 가능하게 됩니다.

 

change_text라는 함수를 생성하고 이 함수는 label의 config method를 이용해 label의 text 옵션을 New text로 설정하는 기능을 담고 있습니다.

 

그리고 Button 객체의 command에 change_text 함수를 할당하여 Button이 클릭될 경우 change_text 함수가 실행되도록 한 것이죠.

 

따라서 Button을 누르면 config method가 Label의 text를 New text로 바꾸는 것입니다.

 

 

 

 

 

 

728x90
반응형