본문 바로가기
GUI 프로젝트/파일 불러온 뒤 자동수정 저장 (Tkinter)

[파이썬 Tkinter GUI 만들기] 13. 일단 파일 생성하기

by 만다린망고 2022. 1. 28.
반응형

최종 목표는 아래 GUI 이다. 

 

 

2차 선택 까지는 했고 불러온 텍스트를 df1 이라는 변수에 입력까지 했다. 날짜와 작성자도 추가해야하는데 일단 txt 먼저 생성해보기로 했다. 

 

먼저 함수를 정의했다. txt로 저장하는 함수다. os.path.dirname 을 이용해서 filename 을 포함하는 폴더의 경로를 찾고, 해당 폴더에 my_result 라는 이름으로 저장하는 함수를 만들었다. 

 

 

txt 생성이라는 버튼도 추가했다. 8열에 추가했는데, 8열이 아니라 현재 생성된 열 다음열에 추가된다. 뭐 당연한 결과다. 

 

 

실행 결과는 아래와 같다. 저장은 잘 된다. 

 

 

코드는 아래와 같다. 

 

import tkinter as tk
import tkinter.filedialog #이걸 따로 추가해야된다. 왜인지 모르겠음;
import pandas as pd
import os

#윈도우 생성
root=tk.Tk()

#전체 이름
root.title('파일 여는 프로그램')

#창 크기 +붙은 부분은 좌상단 떨어진 위치
root.geometry("1000x400+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)

button72 = tkinter.Button(root,text="파일 생성",font=('Arial 15 bold'), overrelief="solid", 
    command=savefile,bg="red")
button72.grid(row=8,column=3,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)


    root.update() 

    lab02.destroy()


root.mainloop()
반응형

댓글