반응형
파이썬 GUI tkinter / dataframe의 내용을 Listbox, Label로 표시
1) numpy 배열로 data frame 생성
Listbox에 넣을 이름과 Label에 정보를 표시할 성별과 태어난 해 정보를 가지고 배열을 만듭니다.
배열을 DataFrame으로 생성합니다.
# numpy 배열로 data frame 생성 my_darray = np.array([ ["Bob", "M", 1991], ["Kate", "W", 1992], ["Kevin", "M", 1993], ["Scott","M",1994], ["Jackson", "M", 1995], ["Liam", "M", 1996], ["Noah", "M", 1997], ["Aiden", "M", 1998], ["Lucas", "M", 1999], ["Mason", "M", 2000]]) student_pd = pd.DataFrame(my_darray) print(student_pd) print(student_pd.shape) print(len(student_pd))
2) Tkinter로 window 생성 및 ListBox 생성
간단하게 Tk() 생성자로 window를 생성하였고, 크기를 지정하였습니다.
또한 Listbox 를 생성하였고, Listbox 안의 column이 선택되었을 때, CurSelect(임의 생성 함수)가 호출되도록 하였습니다.
그리고 리스트에는 dataframe의 이름을 삽입하도록 하였고, 리스트의 맨뒤쪽(END)에 삽입이되도록 하였습니다.
window = Tk() window.geometry("300x200") lb = Listbox(window, height=5, selectmode=SINGLE) lb.bind('<<ListboxSelect>>',CurSelect) lb.pack() for i in student_pd.index: val = student_pd.loc[i, 0] lb.insert(END, val)
3) Label 생성
고정으로 표시할 Label과 이름, 성별, 태어난 해에 대한 정보를 동적으로 가져와 표시할 라벨을 생성하였습니다.
Name_l = Label(window, text="Name : ") Name_l.pack() Name_w = Label(window, text="") Name_w.pack() Sex_l = Label(window, text="Sex : ") Sex_l.pack() Sex_w = Label(window, text="") Sex_w.pack() Birth_l = Label(window, text="Birth : ") Birth_l.pack() Birth_w = Label(window, text="") Birth_w.pack()
4) Listbox에 아이템이 선택되었을 때의 호출되는 함수 정의
lb.curselection() 함수를 이용해 현재 선택된 아이템의 정보를 가져오고, 출력해보게 하였습니다.
그리고 Label에 현재 선택된 아이템의 이름, 성별, 태어난 해를 표시하도록 하였습니다.
def CurSelect(evt): value = str((lb.get(lb.curselection()))) index = str((lb.index(lb.curselection()))) print(value) print(index) Name_w["text"] = student_pd.loc[lb.index(lb.curselection()), 0] Sex_w["text"] = student_pd.loc[lb.index(lb.curselection()), 1] Birth_w["text"] = student_pd.loc[lb.index(lb.curselection()), 2]
전체 코드
import numpy as np import pandas as pd from tkinter import * # numpy 배열로 data frame 생성 my_darray = np.array([ ["Bob", "M", 1991], ["Kate", "W", 1992], ["Kevin", "M", 1993], ["Scott","M",1994], ["Jackson", "M", 1995], ["Liam", "M", 1996], ["Noah", "M", 1997], ["Aiden", "M", 1998], ["Lucas", "M", 1999], ["Mason", "M", 2000]]) student_pd = pd.DataFrame(my_darray) print(student_pd) print(student_pd.shape) print(len(student_pd)) def CurSelect(evt): value = str((lb.get(lb.curselection()))) index = str((lb.index(lb.curselection()))) print(value) print(index) Name_w["text"] = student_pd.loc[lb.index(lb.curselection()), 0] Sex_w["text"] = student_pd.loc[lb.index(lb.curselection()), 1] Birth_w["text"] = student_pd.loc[lb.index(lb.curselection()), 2] window = Tk() window.geometry("300x200") lb = Listbox(window, height=5, selectmode=SINGLE) lb.bind('<<ListboxSelect>>',CurSelect) lb.pack() for i in student_pd.index: val = student_pd.loc[i, 0] lb.insert(END, val) Name_l = Label(window, text="Name : ") Name_l.pack() Name_w = Label(window, text="") Name_w.pack() Sex_l = Label(window, text="Sex : ") Sex_l.pack() Sex_w = Label(window, text="") Sex_w.pack() Birth_l = Label(window, text="Birth : ") Birth_l.pack() Birth_w = Label(window, text="") Birth_w.pack() window.mainloop()
반응형
'파이썬 > 파이썬 GUI' 카테고리의 다른 글
파이썬 GUI PyQt5(5) - QListView 간단하게 사용하기 (0) | 2021.06.29 |
---|---|
파이썬 GUI PyQt5(4) - Horizontal / Vertical Slider 사용하기 (0) | 2021.06.28 |
파이썬 GUI PyQt5(3) - QFileDialog를 이용하여 파일 선택 및 열기 (5) | 2021.06.27 |
파이썬 GUI PyQt5(2) - QtDesigner Push button 이벤트 signal/slot 연동 (0) | 2021.06.26 |
파이썬 GUI PyQt5(1) - QtDesigner를 이용한 간단한 창 띄워보기 (0) | 2021.06.25 |