윈도우 프로그램 기본 위젯

강의노트 ScrolledText

강의노트 • 조회수 438 • 댓글 0 • 작성 11개월 전 • 수정 1개월 전  
  • scrolledText

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)  # 10열부터 끝까지
    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()

연습문제

  1. ScrolledText로 입력창을 구현한다. "저장"버튼 클릭시 내용이 콘솔에 출력되고 "지우기" 버튼 클릭시 내용을 삭제한다.

  2. 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. 시간을 설정하고 관리하는 모듈을 불러온다.
  2. 현재 시간을 나타낸다. 나타내는 형식은 "년-월-일 시:분:초"이다.
  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()
이전 글
마지막 글입니다.
댓글
댓글로 소통하세요.