Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter Treeview 위젯으로 Excel 스프레드시트 데이터 표시하는 방법

Excel 스프레드시트는 행(row)과 열(column) 형태로 저장된 정보의 집합입니다. Tkinter 애플리케이션에서는 Treeview 위젯을 사용하면 이러한 스프레드시트 데이터를 화면에 표시하고 활용할 수 있습니다. Treeview 위젯은 사용자가 표(table) 형태로 데이터를 추가하고 조작할 수 있도록 도와줍니다.

다만 대량의 데이터를 분석하고 가공해야 할 때는 Python의 Pandas 라이브러리가 유용합니다. Pandas는 데이터 분석에 필요한 다양한 내장 함수와 메서드를 제공하기 때문입니다.

구현 단계

이번 예제에서는 다음 순서대로 Excel 데이터를 Tkinter 창에 표시해 보겠습니다.

  • Numpy, Pandas, filedialog 등 필요한 라이브러리를 임포트합니다.
  • 사용자가 파일 탐색기에서 파일을 선택할 수 있도록 메뉴 바(Menu Bar)를 추가합니다.
  • open_file() 함수를 정의하여 탐색기에서 .xlsx 파일만 열 수 있도록 설정합니다.
  • Treeview 위젯을 생성합니다.
  • 열 데이터를 리스트로 변환한 뒤 Treeview 위젯에 컬럼을 추가합니다.
  • 컬럼을 반복(iterate)하며 데이터의 모든 헤더(Heading)를 찾아 설정합니다.
  • 데이터프레임을 NumPy 객체로 변환한 후 리스트 메서드를 사용해 행 데이터를 추출합니다.
  • 모든 행을 반복하면서 순서대로 트리에 삽입합니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk, filedialog
import numpy
import pandas as pd

# tkinter 프레임 인스턴스 생성
win = Tk()

# tkinter 창 크기 설정
win.geometry("700x350")

# Style 위젯 객체 생성
style = ttk.Style()
style.theme_use('clam')

# Frame 생성
frame = Frame(win)
frame.pack(pady=20)

# 파일을 여는 함수 정의
def open_file():
    filename = filedialog.askopenfilename(title="Open a File", filetype=(("xlsx files", "*.xlsx"), ("All Files", "*.*")))

    if filename:
        try:
            filename = r"{}".format(filename)
            df = pd.read_excel(filename)
        except ValueError:
            label.config(text="File could not be opened")
        except FileNotFoundError:
            label.config(text="File Not Found")

    # 트리에 남아 있는 기존 데이터 모두 삭제
    clear_treeview()

    # Treeview 위젯에 새 데이터 추가
    tree["column"] = list(df.columns)
    tree["show"] = "headings"

    # 헤더 설정: 컬럼 반복 처리
    for col in tree["column"]:
        tree.heading(col, text=col)

    # 행에 데이터 채우기
    df_rows = df.to_numpy().tolist()
    for row in df_rows:
        tree.insert("", "end", values=row)

    tree.pack()

# Treeview 위젯 초기화 함수
def clear_treeview():
    tree.delete(*tree.get_children())

# Treeview 위젯 생성
tree = ttk.Treeview(frame)

# 메뉴 추가
m = Menu(win)
win.config(menu=m)

# 메뉴 드롭다운 추가
file_menu = Menu(m, tearoff=False)
m.add_cascade(label="Menu", menu=file_menu)
file_menu.add_command(label="Open Spreadsheet", command=open_file)

# 파일 내용 표시용 Label 위젯 추가
label = Label(win, text='')
label.pack(pady=20)

win.mainloop()

실행 결과

위 코드를 실행하면 상단에 메뉴가 있는 창이 나타나고, 이 메뉴를 통해 Excel 파일을 열 수 있습니다.

Tkinter Treeview 위젯으로 Excel 스프레드시트 데이터 표시하는 방법

파일을 열면 스프레드시트의 데이터가 창 안에 표 형태로 출력됩니다.

Tkinter Treeview 위젯으로 Excel 스프레드시트 데이터 표시하는 방법