✏️ [파이썬] 간단한 텍스트 에디터 (열기, 조회, 수정, 저장)
ChatGPT를 참고하여 만든 Tkinter 텍스트 에디터 입니다.
▫️ 텍스트 파일 열기
▫️ 수정 사항 발생 시 타이틀바에 알림
▫️ 저장
▫️ 종료 전 수정 사항 저장 여부 확인
📦 파이썬 코드
import tkinter as tk
from tkinter import filedialog
class TextEditor:
def __init__(self, master):
self.master = master
self.master.title("텍스트 편집기")
self.text = tk.Text(self.master, wrap='word')
self.text.pack(fill='both', expand=True)
self.changed = False
self.filename = None
self.text.bind('<KeyRelease>', self.track_changes)
menu = tk.Menu(self.master)
self.master.config(menu=menu)
file_menu = tk.Menu(menu, tearoff=False)
menu.add_cascade(label='파일', menu=file_menu)
file_menu.add_command(label='열기', command=self.open_file)
file_menu.add_command(label='저장', command=self.save_file)
file_menu.add_separator()
file_menu.add_command(label='종료', command=self.quit)
def track_changes(self, event=None):
self.changed = True
self.master.title(f'텍스트 편집기 - 수정 사항 저장 안됨')
def open_file(self):
if self.changed:
answer = tk.messagebox.askyesnocancel(
'수정 사항 저장 안됨',
'수정 사항을 저장하실껀가요?'
)
if answer == True:
self.save_file()
elif answer == None:
return
self.filename = filedialog.askopenfilename(
defaultextension='.txt',
filetypes=[('Text Files', '*.txt'), ('All Files', '*.*')]
)
if self.filename:
with open(self.filename, 'r', encoding="utf-8") as file:
self.text.delete('1.0', 'end')
self.text.insert('1.0', file.read())
filename_only = self.filename[self.filename.rfind("/")+1:]
self.master.title(f'텍스트 편집기 - {filename_only}')
self.changed = False
def save_file(self):
if not self.filename:
self.filename = filedialog.asksaveasfilename(
defaultextension='.txt',
filetypes=[('Text Files', '*.txt'), ('All Files', '*.*')]
)
if self.filename:
with open(self.filename, 'w', encoding="utf-8") as file:
file.write(self.text.get('1.0', 'end'))
filename_only = self.filename[self.filename.rfind("/")+1:]
self.master.title(f'텍스트 편집기 - {filename_only}')
self.changed = False
def quit(self):
if self.changed:
answer = tk.messagebox.askyesnocancel(
'수정 사항 저장 안됨',
'수정 사항을 저장하실껀가요?'
)
if answer == True:
self.save_file()
elif answer == None:
return
self.master.destroy()
if __name__ == '__main__':
root = tk.Tk()
app = TextEditor(root)
root.mainloop()
728x90
'플그래밍 > 파이써언' 카테고리의 다른 글
[파이썬] Pandas 기초 (0) | 2023.02.10 |
---|---|
[파이썬] 간단한 계산기 (+, -, *, /) (0) | 2023.02.10 |
[파이썬 기초] 너무 쉬운 IndexError (0) | 2022.12.19 |
[파이썬 기초] 너무 쉬운 ModuleNotFoundError (0) | 2022.12.19 |
NLTK POS TAG 목록 (0) | 2022.12.17 |