실무로 배우는 파이썬/outsrc1. Rumi_marketing

파이썬 간단한 GUI tkinter로 오류 팝업창 만들기(엑셀의 유효성 검사와 비슷한..)

에스도비91 2025. 2. 24. 21:07
반응형

 

 

오늘은 파이썬에서, 의도치 않은 작업이

진행될 경우, 오류 팝업창을 띄우는

간단한 GUI interface로 구현해보겠습니다.

엑셀로 치면 유효성 검사? 같은 기능이죠.

이 범위엔 이런 데이터만 넣어라.. 뭐 이런

 

import os ; import tkinter as tk ; import pandas as pd
def get_csv(directory):
    files=os.listdir(directory)
    return [file for file in files if file.endswith('.csv')]
def warning_stop():
    popup=tk.Tk() ; popup.title("Warning") ; wr_txt="   creative, inverntory 섞임 오류   "    
    txt_info=tk.Label(popup, text=wr_txt+'\n\nRaw 폴더 내 파일을 확인 要')
    def on_close():
        popup.quit() ; popup.destroy() ; sys.exit()    
    button=tk.Button(popup, text="종료", command=on_close)
    txt_info.pack(pady=10) ; button.pack(pady=10) ; popup.mainloop()
    
list_csv=get_csv('raw') ; df_csv=pd.DataFrame()
for i in list_csv:
    df_raw=pd.read_csv('raw/'+i) ; df_csv=pd.concat([df_csv,df_raw])
df_csv=df_csv.drop_duplicates() ; crt='Creative' ; ivt='Inventory - App Title'
if crt in df_csv.columns and ivt in df_csv.columns: warning_stop()

list_crt_idx=['Campaign','Creative Type','Creative ID']+[crt] ; list_ivt_idx=['Campaign']+[ivt]
list_idx=list_crt_idx if crt in df_csv.columns else list_ivt_idx if ivt in df_csv.columns else '' # 삼항연산자

 

우선 오늘의 코드 부분입니다. 이번에 새롭게

import할 것은 tkinter 툴킷 인터페이스

toolkit interface의 약자로 가벼운 GUI를

만들기 좋은 모듈입니다.

 

 

파이썬으로 마케팅 CPI trend분석, raw data.csv 중복 없이 하나의 데이터프레임으로 concat하기 feat. 리

오늘은 외주(?)받은 아웃소싱 프로젝트를 진행해보려 합니다. 마케팅에 중요한 지표라는 CPI !!Cost per Install : 설치 건 당 쓴 광고비 파이썬 코드를 이용해서 일자별 CPI trend를pivot분석하고 엑셀의

s-dobby.tistory.com

 

앞서, 마케팅의 CPI 개념을 설명하면서

코드와 같은 경로 내 raw 폴더의 database를

불러와 concat으로 합치고 중복 제거까지

즉, get_csv로 만든 함수와 drop_duplicates

까진 설명을 했었죠. 근데, 좀 더 알아보니

rawDB에 2가지 종류가 있어 raw data를

정리하는 코드를 일부 수정했습니다.

 

 

위와 같이 .ipynb 코드 파일과 같은 경로에

raw 폴더를 두고 그 안에, 5개 파일이 있는데

creative와 inventory 2가지로 나눠집니다.

당연히 그 안에 내용(column명)도 달라서

한 가지 종류만 담아야하니 이렇게 섞이는

경우에는 오류 팝업창이 뜨도록 설게 예정

 

 

위 rawDB로 코드 돌리니 팝업창이 잘 뜨네요.

warning stop()이라는 함수로 tkinter를

사용해 popup이란 객체를 만들어주고,

title은 Warning(팝업창이 작아 W..만 보임..)

tk.Label, 라벨에는 popup 객체에 넣을 텍스트

뭐 때문에 오류 팝업창이 뜨는지를 적어줍니다.

함수 내 함수로 on_close를 만들었는데

이게 있어야, 팝업창 버튼 눌러 종료 시

렉이 걸리지 않습니다.. quit, destroy 후

sys exit까지,, 이것을 tk.Button에 심어줍니다.

 

 

마무리로, txt_info와 button을 packing

즉, 팝업창에 적재할껀데, 위 아래로 pady=10

위 그림 표시처럼 padding(여백) y축으로

10 pixel씩 둡니다. 이 팝업을 mainloop()로 실행!!

** pad : 완충제 패드, 두툼한 패딩..

 

보안 문제로 creative, campaign은 blur 처리

 

이번엔 raw 폴더에 creative DB만 남기고

돌려보았습니다. 팝업창 안뜨고 df_csv에

dataframe이 잘 출력되는게 확인됩니다.

invertory 파일들만 남겨도 마찬가지!!

반응형