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()
'파이썬 GUI 만들기 (TKinter)' 카테고리의 다른 글
파이썬] TKinter GUI 포스트 ep.7 - 가상화페 시세확인 기능 개발 완료 [증감율 표시 기능 추가 (▲999%)] (0) | 2020.10.01 |
---|---|
파이썬] TKinter GUI만들기 ep.6 - 위젯 주기적으로 업데이트하기, Threading (0) | 2020.10.01 |
파이썬] 기본라이브러리 TKinter로 GUI 만들기 3탄 - 무료 아이콘 이미지 넣기, 창 추가하기, 창종료, 단축키기능 넣기 (0) | 2020.09.26 |
파이썬]기본 라이브러리 이용하여 GUI만들기 기본 사용법- TKinter (8) | 2020.09.26 |