지난번에 이어 이번엔 Customtkinter의 위젯들을 하나씩 살펴봅시다.
첫째로는 가장 기본이 되는 Label에 대해 알아볼겁니다.
목차
- textvariable
- anchor
- compound
- justify
- .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)
요정도로 해볼 수 있겠습니다.
실행하면 이렇게 됩니다.
공식 위키에서 몇개 긁어와서 해봅시다.
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를 사용해서 정의하면 됩니다.
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)으로 만나용~