ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Tkinter 사용법
    PYTHON/Python 라이브러리 2024. 1. 2. 17:53

    * https://076923.github.io/posts/Python-tkinter-1/ 를 참조하여 공부했습니다. 

     

    import tkinter
    
    window=tkinter.Tk() # 가장 상위 레벨의 윈도우 창 생성 
    
    window.title("Tkinter 공부") # 윈도우 창의 제목 
    window.geometry("300x300+100+100") # 너비x높이+x좌표+y좌표 (초기 화면 위치의 좌표까지 설정 가능)
    # 영문자 x를 사용해야 함 
    window.resizable(False, False) # 윈도우 창 크기 조절 가능 여부
    # True로 설정시 윈도우 창 크기 조절 가능 
    
    label=tkinter.Label(window, text="로그인") # 라벨 위젯 설정
    label.pack() # 위젯 배치
    
    
    
    window.mainloop() # 윈도우가 종료될 때까지 실행

     

     

     


     

     

    Label Parameter 라벨 문자열 설정 

    이름 의미 기본값 속성
    text 라벨에 표시할 문자열    
    textvariable 라벨에 표시할 문자열을 가져올 변수    
    anchor 라벨안의 문자열 또는 이미지의 위치 center n, ne, e, se, s, sw, w, nw, center
    justify 라벨의 문자열이 여러 줄일 경우 정렬 방법 center center, left, right
    wraplength 자동 줄내림 설정 너비 0 상수 

     

     

    라벨 형태 설정

    이름 의미 기본값 속성
    width 라벨의 너비  0 상수
    height 라벨의 높이 0 상수
    relief 라벨의 테두리 모양 flat(기본 테두리) groove(홈이 파인 듯한),
    raised (올라온 듯한),
    ridge(능선), solid(뚜렷한 선), sunken(움푹 파인듯한)
    borderwidth=bd 라벨 테두리 두께    
    backgroundcolor=bg 라벨 배경 색상    
    fireground=fg 라벨의 문자열 색상    
    padx 라벨의 테두리와 내용의 가로 여백    
    pady 라벨의 테두리와 내용의 세로 여백    

    RGB 값 또는 HEX 코드 사용가능

     

    라벨 형식

    이름 의미 기본값 속성
    bitmap 라벨에 포함할 기본 이미지   info, warning, error, question, questhead, hourglass, gray12, gray25, gray50, gray75
    image 임의 이미지 none bottom, center, left, none, right, top
    compound 라벨의 문자열과 이미지를 동시에 표시할 때 이미지의 위치 none bottom, center, left, none, right, top
    font 라벨의 문자열 글꼴 설정 TkDefaultFont font
    cursor 라벨의 마우스 커서 모양   커서 속성 

     

     

    라벨의 상태 설정

    이름 의미  기본값 속성
    state 상태 설정 normal normal, active, disabled
    activebackground active 상태일 때 라벨의 배경 색상    
    activeforeground active 상태일 때 라벨의 문자열 색상    
    disabledforeground disabeld 상태일 때 라벨의 문자열 색상    

     

    라벨의 하이라이트 설정 

    이름 의미 기본값 속성
    highlightcolor 라벨이 선택되었을 때 색상    
    highlightbackground 라벨이 선택되지 않았을 때 색상    
    highlightthickness 라벨이 선택되었을 때 두께 (두께 설정)    

     

    버튼 속성 (버튼도 라벨 속성과 동일한 속성 많음)

    activebackground active 상태일 때 버튼의 배경 색싱    
    overrelief 버튼에 마우스를 올렸을 때 버튼의 테두리 모양 raised flat, groove, raised, ridge, solid, sunken
    command
    버튼이 active 상태일 때 실행하는 메서드(함수)    
    repeatdelay 버튼이 눌러진 상태에서 command 실행까지의 대기 시간    
    repeatinterval 버튼이 눌러진 상태에서 command 실행의 반복 시간    

     

     

     

    import tkinter
    
    window=tkinter.Tk() # 가장 상위 레벨의 윈도우 창 생성 
    window.title("Tkinter 공부") # 윈도우 창의 제목 
    window.geometry("300x300+100+100") # 너비x높이+x좌표+y좌표 (초기 화면 위치의 좌표까지 설정 가능)
    # 영문자 x를 사용해야 함 
    window.resizable(False, False) # 윈도우 창 크기 조절 가능 여부
    # True로 설정시 윈도우 창 크기 조절 가능 
    
    
    label=tkinter.Label(window, relief='raised', text="0", padx=10, pady=10) # 라벨 위젯 설정
    label.pack() # 위젯 배치
    
    count=0
    
    def countUP():
        global count
        count +=1
        label.config(text=str(count))
    
    button = tkinter.Button(window, activebackground='#FF007F', highlightcolor='#FF007F', bg='#FFD1DC', text='count', overrelief="solid", width=15, command=countUP, repeatdelay=1000, repeatinterval=100)
    button.pack()
    
    
    window.mainloop() # 윈도우가 종료될 때까지 실행

     

     

     


    응용 ( 로그창 구현 )

     

     

    import tkinter as tk
    from tkinter import *
    from threading import Thread
    from queue import Queue
    
    # 메인 스레드에서 사용할 메시지 큐
    log_queue = Queue()
    
    def start_td():
        # 백그라운드에서 동작하는 스레드를 시작
        t1 = Thread(target=start_macro)
        t1.daemon = True  # 메인 윈도우 종료 시 스레드도 종료
        t1.start()
    
    def log_message(message):
        # 메시지를 메시지 큐에 추가
        global log_queue
        log_queue.put(message)
    
    def update_log_text(log_text_widget):
        # 로그 텍스트 업데이트 함수
        global log_queue
        while not log_queue.empty():
            message = log_queue.get()
            log_text_widget.configure(state='normal')  # 로그 텍스트 위젯을 편집 가능한 상태로 변경
            log_text_widget.insert(tk.END, message + "\n")  # 메시지를 로그 텍스트 위젯에 추가
            log_text_widget.configure(state='disabled')  # 로그 텍스트 위젯을 읽기 전용 상태로 변경
            log_text_widget.see(tk.END)  # 로그 텍스트를 맨 아래로 스크롤
        log_text_widget.after(100, update_log_text, log_text_widget)  # 100ms마다 업데이트 함수를 재귀적으로 호출
    
    if __name__ == "__main__":
        # 메인 윈도우 설정
        window = tk.Tk()
        window.title("Tkinter")
        window.geometry("300x600")  # 너비 x 높이
    
        # 로그인 프레임 설정
        login_frame = tk.Frame(window, bd=2, relief='groove', padx=5, pady=5, bg='light blue')
        login_frame.pack(fill='x', expand=False, padx=10, pady=5)  
    
        # 아이디 입력 필드
        id_label = tk.Label(login_frame, text="아이디", bg='light blue')
        id_label.pack(fill='x', expand=True)
        id_input = tk.Entry(login_frame, bd=1, relief='groove')
        id_input.pack(fill='x', expand=True, padx=10, pady=2)  
    
        # 비밀번호 입력 필드
        pw_label = tk.Label(login_frame, text="비밀번호", bg='light blue')
        pw_label.pack(fill='x', expand=True)
        pw_input = tk.Entry(login_frame, show='*', bd=1, relief='groove')
        pw_input.pack(fill='x', expand=True, padx=10, pady=2) 
    
        # 시작 버튼
        start_btn = tk.Button(window, text='Tkinter 시작', bd=2, relief='groove', padx=5, pady=5, command=start_td, bg='light green', activebackground='green')
        start_btn.pack(fill='x', expand=False, padx=10, pady=5)  
    
        # 로그창 (이 부분을 버튼 아래로 옮겼습니다)
        log_frame = tk.Frame(window, bd=2, relief='groove', padx=5, pady=5)
        log_frame.pack(fill='both', expand=True, padx=10, pady=10) 
        log_text = tk.Text(log_frame, height=15) 
        log_text.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
        log_text.configure(state='disabled')
        update_log_text(log_text)  # 로그창 업데이트 시작
    
        # GUI를 업데이트하는 함수를 호출하는 메소드, 100ms마다 실행
        window.after(100, update_log_text, log_text)
    
        window.mainloop()

     

     

Designed by Tistory.