-
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()
'PYTHON > Python 라이브러리' 카테고리의 다른 글
회사의 매출을 세련된 차트로 만들고 싶다면? (0) 2024.03.16 비동기 라이브러리 Asyncio (0) 2024.01.05