파이썬 GUI 만들기 (TKinter)

파이썬] 기본라이브러리로 GUI 만들기 2탄 - TKinter 기본기능(재시작, 텍스트불러오기, 삭제)

gomming 2020. 9. 26. 01:01

1. 재시작 기능

#tkinter재시작 #restart #reboot #다시시작 #새로고침 #refresh

재시작하는 기능은 예전에 포스팅을 한적이 있었던것 같은데요

이번에 사용해 볼 기능은 os.system() 기능을 사용한 방법입니다.

def closing(event):
    window.destroy()
    os.system('C:\\gom\\python gom_gui.py')

이렇게 closing 이벤트에 한줄을 더 써서 창 종료 후 프로그램을 다시 시작하도록 하였어요 !.!

 

이제 위 함수가 적용 된 라벨을 마우스 좌클릭하면 창이 종료 되고 새로 실행 됩니다.

코드 수정하고 이제 Reboot 버튼을 누르면 수정 내용 반영하여 다시 실행할 수 있어요 !. !

 

2. 버튼 위젯 만들기

다음 기본기능은 버튼 만들기 입니다. 버튼을 클릭했을 때 어떠한 커맨드를 실행할 수 있도록 하는 방식인데요.

실습으로 불러오기 Load저장하기 Save버튼을 만들어 볼게요

load_bt = tk.Button(window, text='Load', bg='gray19', fg='snow', width=10)
load_bt.place(x=300, y=400)
save_bt = tk.Button(window, text='Save', bg='gray19', fg='snow', width=10)
save_bt.place(x=400, y=400)

tk.Button() 으로 버튼을 만들 수 있어요. 라벨과 유사하게 사용할 수 있답니다.

 

3. 텍스트 파일 내용 불러오기

자 이제 버튼에 간단한 기능을 넣어 보겠습니다.

제가 동일 경로에 gom.txt라는 파일을 저장해 놓았고 서비스를 이용한 고객 명이

나열되어 있다고 가정합니다.

위에서 만들었던 Load 버튼을 클릭하면 텍스트를 불러오도록 해볼게요. 함수 이름은 cus 로 작성해 봅시다.

from collections import Counter

def cus():
    cus_list = []
    with open('C:\\gom\\gom.txt') as cus:
        for line in cus:
            cus_list.append(line)

    cus_list = cus_list[2:]

    for i in range(len(cus_list)):
        cus_all.insert(INSERT, cus_list[i])
    cus_all1.insert(INSERT, '\n'+Counter(cus_list).most_common(1)[0][0])

cus_all = tk.Text(window, width=20, height=10)
cus_all.place(x=200, y=100)
cus_all1 = tk.Text(window, width=20, height=3)
cus_all1.place(x=400, y=100)

load_bt = tk.Button(window, text='Load', bg='gray19', fg='snow', width=10, command=cus)
load_bt.place(x=300, y=400)
save_bt = tk.Button(window, text='Save', bg='gray19', fg='snow', width=10)
save_bt.place(x=400, y=400)
lb_hi = Label(window, text="->",fg='gray19')
lb_hi.place(x=360,y=110)

load_bt 을 보시면 command = cus라고 되어 있죠 ?

이게 버튼을 누르면 해당 함수를 실행하겠다는 것입니다.

 

함수내용은 def cus(): 아래로 작성 되어 있는데요

우선 gom.txt파일의 모든 내용을 불러와 cus_list에 첨부합니다.

 

다음으로 cus_list[2:] 인덱싱을 통해 헤더 부분을 제거합니다.

 

이제 for문을 이용해서 Text에 한줄씩 추가 시키도록 합니다.

cus_all.insert(INSERT, cus_list[i])

 

마지막으로 cus_list의 손님 중 가장 빈도가 높은 고객 명을 우측 다른 텍스트 위젯에 출력해주도록 합니다.

cus_all1.insert(INSERT, '\n'+Counter(cus_list).most_common(1)[0][0])

Counter라는 기능으로 가장 높은 빈도의 문자열과 갯수를 튜플로 생성해 줄 수 있어요.

Counter 기능은 'from collections import Counter' 이렇게 collections 라는 라이브러리를 통해 이용할 수 있어요

#문자열빈도 #가장많은문자열 #가장많은단어찾기 #collections #most_common

 

위 코드를 실행하여 load 버튼을 클릭하면, 아래와 같은 결과가 나타납니다.

 

 

4.텍스트 삭제하기

#delete #텍스트삭제

이제 텍스트의 내용을 Clear라는 버튼을 클릭하면 삭제 되도록 해볼게요.

def clear():
    cus_all.delete(0.0,10.0)
    cus_all1.delete(0.0,3.0)
    
clear_bt = tk.Button(window, text='Clear', bg='royalblue', fg='snow', width=7, command=clear)
clear_bt.place(x=385, y=400)

clear_bt라는 버튼을 만들고 Load와 Save 사이에 위치 시켰습니다.

버튼을 클릭하면 clear 라는 함수가 동작하여 Text 위젯의 내용을 모두 삭제 되도록 하였습니다. (delete 뒤에 숫자는 인덱스를 의미해요 0번째 줄 0번째 문자부터 10번째 줄 0번째 문자까지 삭제하겠다!가 되는거죠 ~ ,~)

 

코드를 실행하여 Clear 버튼을 클릭한 결과는 ??

 

싹 사라졌죠 ?

 

아래 전체 코드 드립니다.

from tkinter import *
import tkinter as tk
import os
from collections import Counter

window = Tk()

window.title("Naver Store management program")

def closing(event):
    window.destroy()
    os.system('C:\\gom\\python gom_gui.py')
    
lb_hi = Label(window, text="Reboot", bg='gray19', fg='gray60',width=10, height=3)
lb_hi.bind('<Button-1>',closing)
lb_hi.place(x=10,y=10)

entry = tk.Entry(fg="gray19", bg="snow", width=20)
blog='blog.naver.com/xenostep'
entry.insert(0,blog)
entry.place(x=10,y=80)

entry1 = tk.Entry(fg="gray19", bg="snow", width=20)
entry1.insert(0, entry.get().split("/")[1])
entry1.place(x=10,y=100)

def cus():
    cus_list = []
    with open('C:\\gom\\gom.txt') as cus:
        for line in cus:
            cus_list.append(line)

    cus_list = cus_list[2:]

    for i in range(len(cus_list)):
        cus_all.insert(INSERT, cus_list[i])
    cus_all1.insert(INSERT, '\n'+Counter(cus_list).most_common(1)[0][0])

def clear():
    cus_all.delete(0.0,10.0)
    cus_all1.delete(0.0,3.0)
    
cus_all = tk.Text(window, width=20, height=10)
cus_all.place(x=200, y=100)
cus_all1 = tk.Text(window, width=20, height=3)
cus_all1.place(x=400, y=100)

load_bt = tk.Button(window, text='Load', bg='gray19', fg='snow', width=10, command=cus)
load_bt.place(x=300, y=400)
clear_bt = tk.Button(window, text='Clear', bg='royalblue', fg='snow', width=7, command=clear)
clear_bt.place(x=385, y=400)
save_bt = tk.Button(window, text='Save', bg='gray19', fg='snow', width=10)
save_bt.place(x=450, y=400)
lb_hi = Label(window, text="->",fg='gray19')
lb_hi.place(x=360,y=110)

window.geometry('800x500+300+100')
window.mainloop()