파이썬이 제일 쉬워

[Python/Customtkinter] 너무나도 쉬운 Customtkinter Label(CTkLabel) 부셔먹기 본문

Python

[Python/Customtkinter] 너무나도 쉬운 Customtkinter Label(CTkLabel) 부셔먹기

HighBright 2024. 6. 12. 19:42

지난번에 이어 이번엔 Customtkinter의 위젯들을 하나씩 살펴봅시다.

첫째로는 가장 기본이 되는 Label에 대해 알아볼겁니다.

 

목차

  1. textvariable
  2. anchor
  3. compound
  4. justify
  5. .bind()

 

 

가장 기본적인 형태는 

 

 
 import customtkinter
 
 customtkinter.set_appearance_mode("dark")
 customtkinter.set_default_color_theme("dark-blue")

 app = customtkinter.CTk()
 app.geometry("500x500")
 app.title("라벨")
 
 label = customtkinter.CTkLabel(master=app, text="이건 라벨입니다.")
 label.grid(row=0, column=0 , pady=10, padx=10)
 
 app.mainloop()
 

 

요정도로 해볼 수 있겠습니다.

 

실행하면 이렇게 됩니다.

공식 위키에서 몇개 긁어와서 해봅시다.

 

1. textvariable

 tvar = customtkinter.StringVar()
 label = customtkinter.CTkLabel(master=app, text="이건 라벨입니다.", textvariable=tvar, width=100)
 label.grid(row=0, column=0 , pady=10, padx=10)

 tvar.set("변수로 바뀐 라벨입니다."
 print(tvar.get())
 
 #===실행 결과===#
 변수로 바뀐 라벨입니다.

 

 

실행 결과

textvariable은 label의 text를 동적으로 변경할 수 있게 해줍니다.

 

이거 안쓰면 

 
 label.configure(text="configure로 바뀐 라벨입니다.") # label 내용 바꾸기
 print(label._text) # 이거나
 print (label.cget( "text" ) # 이거 쓰면됩니다.
 
 #===실행 결과===#
 configure로 바뀐 라벨입니다.
 configure로 바뀐 라벨입니다.
 

 

이거 쓰면 됩니다. 전 이게 더 편한 듯.

 

참고로 .cget("<attribute>")는 <attribute>에 설정된 값을 반환합니다.

위에서 print(label.cget("width"))하면 100이 출력됩니당.

 

2. anchor

얘는 Label이 텍스트의 전체 크기보다 클 경우 텍스트를 어따가 배열할지 정해줍니다.보기쉽게 배경 색도 바꿔놓겠습니다.

 

 
 label_1 = customtkinter.CTkLabel(master=app, text="N", width=400, height=100, fg_color="red",   anchor="n")
 label_1.grid(row=0, column=0, pady=10, padx=10)

 label_2 = customtkinter.CTkLabel(master=app, text="S", width=400, height=100, fg_color="blue",   anchor="s")
 label_2.grid(row=1, column=0, pady=10, padx=10)

 label_3 = customtkinter.CTkLabel(master=app, text="W", width=400, height=100, fg_color="green"anchor="w")
 label_3.grid(row=2, column=0, pady=10, padx=10)

 label_4 = customtkinter.CTkLabel(master=app, text="E", width=400, height=100, fg_color= "black",   anchor="e")
 label_4.grid(row=3, column=0, pady=10, padx=10)
 

 

 

실행 결과

실행하면 일케 됩니다.

 

3. compound

얘는 이미지랑 같이 쓸 때 씁니다. 이미지를 넣을려면 attribute에 image 속성을 추가하면 되고,

이미지 설정은 PIL과 CTkImage를 사용해서 정의하면 됩니다.

 
 from PIL import Image
 
 img = customtkinter.CTkImage(Image.open("test.jpg"), size=(100,100))
 
 label_1 = customtkinter.CTkLabel(master=app, text="center", compound="center",image=img)
 label_1.grid(row=0, column=0, pady=10, padx=10)

 label_1 = customtkinter.CTkLabel(master=app, text="top", compound="top",image=img) 
 label_1.grid(row=0, column=1, pady=10, padx=10)

 label_1 = customtkinter.CTkLabel(master=app, text="bottom", compound="bottom",image=img)
 label_1.grid(row=1, column=0, pady=10, padx=10)

 label_1 = customtkinter.CTkLabel(master=app, text="left", compound="left",image=img) 
 label_1.grid(row=1, column=1, pady=10, padx=10)

 label_1 = customtkinter.CTkLabel(master=app, text="right", compound="right",image=img) 
 label_1.grid(row=2, column=0, pady=10, padx=10)
 

 

실행 결과

실행하면 일케 됩니다.

 

4. justify

얘는 label의 텍스트가 여러 줄일 때 사용합니다. 텍스트 정렬 방향을 설정하는 속성입니다.

 
 content = "첫번째 줄 텍스트는 좀 길어요 히히히\n두번째 줄(짧음)\n세번째 줄입니당. 무난쓰"

 label_1 = customtkinter.CTkLabel(master=app, text=content, justify="right")
 label_1.grid(row=0, column=0, pady=10, padx=10)

 label_2 = customtkinter.CTkLabel(master=app, text=content, justify="center")
 label_2.grid(row=1, column=0, pady=10, padx=10)

 label_3 = customtkinter.CTkLabel(master=app, text=content, justify="left")
 label_3.grid(row=2, column=0, pady=10, padx=10)
 
 label_4 = customtkinter.CTkLabel(master=app, text="한줄일 땐? 의미없음", justify="right")
 label_4.grid(row=3, column=0, pady=10, padx=10)
 

 

실행 결과

실행 결과 입니다. 간단하죠?

 

5. bind

이건 tkinter의 bind하고 똑같습니다.

label에서 지정된 행동을 하면 설정된 함수를 실행합니다.

설정된 함수는 반드시 한 개 이상의 parameter를 포함해야 합니다 보통 event로 씁니다.

 
 def pressed(event):
     label_1.configure(text="왼쪽 쟈자잔!")
 def pressed_2(event):
     label_2.configure(text="왼쪽 두번째 함수 작동!")
 def pressed_r(event):
     label_1.configure(text="오른쪽 쟈쟈잔!")
   
 label_1 = customtkinter.CTkLabel(master=app, text="눌러보셈요")
 label_1.bind("<Button-1>", pressed)
 label_1.bind("<Button-1>", pressed_2)
 label_1.bind("<Button-3>", pressed_r)
 label_1.grid(row=0, column=0, pady=10, padx=10)

 label_2 = customtkinter.CTkLabel(master=app, text="")
 label_2.grid(row=1, column=0, pady=10, padx=10)
 

 

 

초기 / 왼클릭 / 우클릭

실행 결과입니다.

 

다음은 사용가능한 event 중 많이 쓰는 거 몇개 뽑아본겁니다.

  • <Button-1> : 왼쪽  클릭
  • <Button-2> : 휠 버튼 클릭
  • <Button-3> : 오른쪽 클릭
  • <Double-Button-1> : 왼쪽 더블클릭
  • <Return> : Enter 키 눌림
  • <Key> : 아무 키 눌림
  • <Enter> : 마우스가 위젯에 들어올 때
  • <Leave> : 마우스가 위젯을 떠날때

더 자세한건 이분거 보세요

https://m.blog.naver.com/heennavi1004/222026398701

 

[tkinter] 이벤트 바인딩(events, binding)

[tkinter] 이벤트 바인딩(events, binding) 2020-07-09 참고 이곳: http://pythonstudy.xyz/python/ar...

blog.naver.com

 

이상입니다. 생각보다 쉽죠? 그냥 tkinter랑 거의 다를 바 없습니다.

다음엔 버튼(CTkButton)으로 만나용~

Comments