반응형
최종 목표는 아래 GUI 이다.
value 라고 쓰여있는 글 입력창까지 생성했다. 오늘은 두개의 화살표 버튼과 두개의 출력창을 생성해보았다.
버튼은 커튼위젯으로 만들었다. 출력창은 text 정보를 입력하지 않은 라벨위젯을 사용했다. 다음시간에는 버튼을 누르면 입력값이 출력창에 전달되는 코드를 짤 것이다.
아래는 코드 실행 결과다.
경로 표시라벨이 한열을 차지하게 되어있어서 위와 같이 되었다. 세 열을 차지하도록 수정하였다.
아래는 수정 결과다.
파일생성이 잘려서 전체 세로크기를 약간 키워주었다.
아래는 실행결과다.
간격들이 좀 맘에 안들긴 하는데, 폰트사이즈와 width와 배치의 원리를 더 이해해야해서 마지막에 원리이해하고 수정하는걸로.
사용 코드는 아래와 같다.
import tkinter as tk
import tkinter.filedialog #이걸 따로 추가해야된다. 왜인지 모르겠음;
import pandas as pd
import os
#윈도우 생성
root=tk.Tk()
#전체 이름
root.title('파일 여는 프로그램')
#창 크기 +붙은 부분은 좌상단 떨어진 위치
root.geometry("1000x430+100+100")
filename=""
mywidth=8
rad_1=tk.IntVar()
rad_2=tk.IntVar()
def openfile():
global filename
filename=tk.filedialog.askopenfilename(initialdir = "C:/Users/Public",
title = "open file", filetypes = (("text file","*.txt"),("all files","*.*")))
def savefile():
path=os.path.dirname(filename)+'/'+'my_result.txt'
df1.to_csv(path,sep=',',header=None)
def radmake1():
global rad21
rad21=tk.Radiobutton(root, text="평균",font=('Arial 18 bold'),
value=3,indicator=False,selectcolor="#4EA346",bg='gray',width=mywidth,variable=rad_2)
rad21.grid(row=2,column=1,padx=5,pady=10,sticky='w')
global rad22
rad22=tk.Radiobutton(root, text="중앙값",font=('Arial 18 bold'),
value=4,indicator=False,selectcolor="#4EA346",bg='gray',width=mywidth,variable=rad_2)
rad22.grid(row=2,column=2,padx=5,pady=10,sticky='w')
#불러온 파일 내용을 데이터프레임에 입력
global df1
df1=pd.read_csv(filename,encoding='CP949',header=None)
def radmake2():
global rad21
rad21=tk.Radiobutton(root, text="표준편차",font=('Arial 18 bold'),
value=5,indicator=False,selectcolor="#4EA346",bg='gray',width=mywidth,variable=rad_2)
rad21.grid(row=2,column=1,padx=5,pady=10,sticky='w')
global rad22
rad22=tk.Radiobutton(root, text="절대편차",font=('Arial 18 bold'),
value=6,indicator=False,selectcolor="#4EA346",bg='gray',width=mywidth,variable=rad_2)
rad22.grid(row=2,column=2,padx=5,pady=10,sticky='w')
#불러온 파일 내용을 데이터프레임에 입력
global df1
df1=pd.read_csv(filename,encoding='CP949',header=None)
#이미지 추가
file_img=tk.PhotoImage(file="경로/icon.png")
file_img=file_img.subsample(2,2)
button01 = tkinter.Button(root, overrelief="solid", command=openfile,bg="white",image=file_img)
button01.grid(row=0,column=1,padx=5,pady=10)
#불변라벨
lab00=tk.Label(root,text="파일 불러오기",font=('Arial 20 bold'),bg='white',fg="black",width=11)
lab00.grid(row=0,column=0,padx=5,pady=10)
lab10=tk.Label(root,text="1차선택",font=('Arial 20 bold'),bg='white',fg="black",width=11)
lab10.grid(row=1,column=0,padx=5,pady=10)
lab20=tk.Label(root,text="2차선택",font=('Arial 20 bold'),bg='white',fg="black",width=11)
lab20.grid(row=2,column=0,padx=5,pady=10)
lab30=tk.Label(root,text="추가 정보 입력",font=('Arial 20 bold'),bg='white',fg="black",width=20)
lab30.grid(row=3,column=0,padx=5,pady=10,columnspan=2) #여러 열 쓰기 위해 columnspan
lab41=tk.Label(root,text="날짜",font=('Arial 20 bold'),bg='white',fg="black",width=11)
lab41.grid(row=4,column=0,padx=5,pady=10)
ent42=tk.Entry(font=('Arial 20 bold'),width=mywidth,bg='#4EA346')
ent42.grid(row=4,column=1,padx=5,pady=10)
button43 = tkinter.Button(root,text=">>",font=('Arial 15 bold'), overrelief="solid",
bg="white")
button43.grid(row=4,column=2,padx=5,pady=10)
lab44=tk.Label(root,font=('Arial 20 bold'),bg='white',fg="black",width=mywidth)
lab44.grid(row=4,column=3,padx=5,pady=10)
lab51=tk.Label(root,text="작성자",font=('Arial 20 bold'),bg='white',fg="black",width=11)
lab51.grid(row=5,column=0,padx=5,pady=10)
ent52=tk.Entry(font=('Arial 20 bold'),width=mywidth,bg='#4EA346')
ent52.grid(row=5,column=1,padx=5,pady=10)
button53 = tkinter.Button(root,text=">>",font=('Arial 15 bold'), overrelief="solid",
bg="white")
button53.grid(row=5,column=2,padx=5,pady=10)
lab54=tk.Label(root,font=('Arial 20 bold'),bg='white',fg="black",width=mywidth)
lab54.grid(row=5,column=3,padx=5,pady=10)
button72 = tkinter.Button(root,text="파일 생성",font=('Arial 15 bold'), overrelief="solid",
command=savefile,bg="red")
button72.grid(row=8,column=10,padx=5,pady=10)
#라디오버튼
rad11=tk.Radiobutton(root, text="대푯값",font=('Arial 18 bold'),
value=1,indicator=False,selectcolor="#4EA346",bg='gray',variable=rad_1,command=radmake1,width=mywidth)
rad11.grid(row=1,column=1,padx=5,pady=10,sticky='w')
rad12=tk.Radiobutton(root, text="변산도",font=('Arial 18 bold'),
value=2,indicator=False,selectcolor="#4EA346",bg='gray',variable=rad_1,command=radmake2,width=mywidth)
rad12.grid(row=1,column=2,padx=5,pady=10,sticky='w')
#업데이트가 필요한 요소들
while True :
lab02=tk.Label(root,text=filename,font=('Arial 12 bold'),bg='white',fg="black",width=50,height=1)
lab02.grid(row=0,column=2,padx=5,pady=10,columnspan=3)
root.update()
lab02.destroy()
root.mainloop()
반응형
'GUI 프로젝트 > 파일 불러온 뒤 자동수정 저장 (Tkinter)' 카테고리의 다른 글
[파이썬 Tkinter GUI 만들기] 18. 결과 메모장으로 출력하기 (0) | 2022.01.29 |
---|---|
[파이썬 Tkinter GUI 만들기] 17. 버튼 누르면 입력된 글 나오게 하기 (0) | 2022.01.29 |
[파이썬 Tkinter GUI 만들기] 15. 글 입력창 생성하기(Entry) (0) | 2022.01.29 |
[파이썬 Tkinter GUI 만들기] 14. grid 여러 칸 사용하기 (0) | 2022.01.29 |
[파이썬 Tkinter GUI 만들기] 13. 일단 파일 생성하기 (0) | 2022.01.28 |
댓글