강의노트 ScrolledText
강의노트
• 조회수 438
• 댓글 0
• 작성 11개월 전
• 수정 1개월 전
ScrolledText
ScrolledText는 텍스트를 입력하거나 표시할 수 있는 멀티라인 위젯으로 스크롤바가 자동으로 부착된다.
ScrolledText는 긴 글, 로그, 채팅 내용, 메모장, 설명문 등 긴 문장을 보여줄 때 필요한 위젯이다.
ScrolledText 위젯을 사용하려면 tkinter.scrolledtext 모듈에서 ScrolledText 클래스를 임포트해야 한다. ScrolledText 클래스는 Text 클래스에서 상속된다.
기본 구조
from tkinter import scrolledtext
txt = scrolledtext.ScrolledText(parent, width=가로글자수, height=세로줄수, wrap=줄바꿈방식, state=상태표시)
여기서,
- width는 한 줄에 표시할 글자 수
- height는 표시할 줄 수
- wrap은 줄바꿈 방식으로
- "word"는 단어 단위로 줄바꿈
- "char"는 문자 단위로 줄바꿈
- "none"은 줄바꿈을 안 한다. 이경우 가로로 스크롤이 발생한다.
- state는 상태로
- "normal"는 편집 가능 상태
- "disabled"는 편집 불가능 상태를 나타낸다.
사용 가능한 메서드
- 위젯.insert(index, text) : index위치에 text를 삽입한다.
- 위젯.get(start,end) : start위치부터 end위치까지의 문자열을 가져온다. "1.0"은 1행 0열을 나타난다. ScrolledText는 왼쪽 위가 1행 0열부터 시작한다. 마지막은 tkinter에 지정되어있는 상수 tk.END로 표현할 수 있다.
- 위젯.delete(start, end) : start위치부터 end위치까지의 문자열을 지운다.
사용 예제
기본 예제
import tkinter as tk
from tkinter import scrolledtext
root = tk.Tk()
root.title("ScrolledText 예제")
txt = scrolledtext.ScrolledText(root, width=20, height=5, wrap="word")
txt.pack(padx=10, pady=10)
root.mainloop()
숫자는 20개, 영문 알파벳은 20개, 한글은 10자 입력된다.
ScrolledText에 입력된 문자열 출력
import tkinter as tk
from tkinter import scrolledtext
root = tk.Tk()
root.title("텍스트 입출력")
root.geometry("300x250")
txt = scrolledtext.ScrolledText(root, width=30, height=10, wrap="word")
txt.pack(padx=10, pady=10)
def show_text():
content = txt.get("1.0", tk.END) # 1행 0열부터 끝까지
print("입력한 내용:\n", content)
btn = tk.Button(root, text="내용 출력", command=show_text)
btn.pack(pady=5)
root.mainloop()
"1.0"은 1행 0열을 나타낸다. 2행의 시작은 엔터 키로 문장이 분리되어야 2행이 시작된다. tk.END는 텍스트의 끝까지를 나타낸다.
ScrolledText 입력창에 초기 텍스트 입력/지우기
import tkinter as tk
from tkinter import scrolledtext
root = tk.Tk()
root.title("내용 초기화")
txt = scrolledtext.ScrolledText(root, width=20, height=5, wrap="char")
txt.pack(padx=10, pady=10)
# 초기 텍스트 설정
txt.insert(tk.END, "여기에 메모를 입력하세요...")
def clear_text():
txt.delete("1.0", tk.END)
btn = tk.Button(root, text="내용 지우기", command=clear_text)
btn.pack(pady=5)
root.mainloop()
연습문제
ScrolledText로 입력창을 구현한다. "저장"버튼 클릭시 내용이 콘솔에 출력되고 "지우기" 버튼 클릭시 내용을 삭제한다.
ScrolledText를 읽기 전용으로 만들고 1초마다 현재 시간을 자동으로 마지막 줄에 입력되도록 만든다.
참고 :
import tkinter as tk
from tkinter import scrolledtext
from datetime import datetime #1
root = tk.Tk()
datetime.now( ).strftime("%Y-%m-%d %H:%M:%S") #2
root.after(1000,함수) #3
- 시간을 설정하고 관리하는 모듈을 불러온다.
- 현재 시간을 나타낸다. 나타내는 형식은 "년-월-일 시:분:초"이다.
- 1초 후에 함수를 호출하는 메소드이다.
정답 :
import tkinter as tk
from tkinter import scrolledtext
from datetime import datetime
# 시각을 추가하는 함수
def update_time():
# 잠시 편집 가능하게 변경
text_area.config(state='normal')
# 현재 시각 추가
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
text_area.insert(tk.END, now + "\n")
# 스크롤을 맨 아래로 이동
text_area.see(tk.END)
# 다시 읽기 전용으로 변경
text_area.config(state='disabled')
# 1초 뒤에 다시 실행
root.after(1000, update_time)
# 윈도우 생성
root = tk.Tk()
root.title("ScrolledText 시각 표시기")
# ScrolledText 위젯 생성 (처음부터 읽기 전용)
text_area = scrolledtext.ScrolledText(root, wrap=tk.WORD, width=40, height=10)
text_area.pack(padx=10, pady=10)
text_area.config(state='disabled') # 읽기 전용 설정
# 시각 갱신 시작
update_time()
# 메인 루프 실행
root.mainloop()
이전 글
마지막 글입니다.
로그인 하면 댓글을 쓸 수 있습니다.