반응형

    파이썬 메모장 만들기 2편

    안녕하세요 밤구름 입니다. 이번 포스팅은 파이썬을 통한 메모장 만드는 방법에 대해서 알아보려 합니다.

    지난 시간에 이어서 다양한 기능들을 하나하나씩 추가해서 완성해 보도록 하겠습니다.

     

    1.메모장 타이틀 바꾸기

    지난 시간에 간단히 메모장을 만들어 봤습니다. 이번에는 파일을 저장할때, 파일을 불러올때 메모장의 이름을 바꿔보도록 하겠습니다.

    import os
    
    #파일 열기 함수
    def open_file():
        file_path = filedialog.askopenfilename()
        with open(file_path, "r") as file:
            content = file.read()
            text_area.delete("1.0", END)
            text_area.insert(END, content)
        #새로 가져온 파일의 이름으로 메모장 이름 바꾸기
        file_name = os.path.basename(file_path)
        root.title(f"{file_name}")
    
    #파일 저장 함수
    def save_file():
        file_path = filedialog.asksaveasfilename(defaultextension=".txt")
        content = text_area.get("1.0", END)
        with open(file_path, "w") as file:
            file.write(content)
        #새로 저장한 파일의 이름으로 메모장 이름 바꾸기
        file_name = os.path.basename(file_path)
        root.title(f"{file_name}")

    파일명에 접근을 하려면 os 모듈을 임포트 해야 합니다. 

    그 다음 file_name에 현재 이름을 가져오는 os.path.basename()함수의 기능을 사용하면 됩니다. 

    위의 코드를 추가하고 실행을 시키면 메모장의 타이틀을 바꿀 수 있습니다.

     

    1.파일열기

    메모장 -> test.txt 

    2.파일저장

    test.txt->test1.txt

     

    2.새로 만들기

    파이썬에서 새로 메모장을 만드는 기능입니다.

    #새로 만들기
    def new_file():
        global file_path
        file_path = None  
        text_area.delete("1.0", END)
        root.title("*제목 없음")
        
        
    file_menu.add_command(label="새로 만들기(W)", command=new_file)

    새로 만들기 버튼과, 새로 만들었을 때, 메모장 이름을 *제목없음으로 바꾸는 기능을 완성하였습니다.

     

    3.자동 글자 수 세기

    파이썬에서 자동으로 글자 수를 세는 함수를 만들어 볼까 합니다.

    #글자 수 세기
    def auto_count_chars(event=None):
        char_count = len(text_area.get("1.0", END))
        char_count_n = len(text_area.get("1.0", END).replace("\n", ""))
        status_bar.config(text=f"띄어쓰기 제외한 글자수: {char_count_n}, 띄어쓰기 포함한 글자수 : {char_count}")
        
    text_area.bind("<KeyRelease>", auto_count_chars)
    
    status_bar = Label(root, text="띄어쓰기 제외한 글자수: 0, 띄어쓰기 포함한 글자수: 0")
    status_bar.pack(side=BOTTOM, fill=X)

    함수를 만들어 본문 전체의 글자 수를 확인 하고 띄어쓰기를 포함한 글자수와 띄어쓰기를 제외한 글자수를 제는 변수를 만들었습니다. 그리고 본문 하단에 글자 수를 표기 하게 하였습니다.

     

    text_area에 bind()를 사용하여 키를 누르고 나면 함수가 자동으로 실행되게 하였습니다.

     

    4.전체코드

    from tkinter import *
    from tkinter import filedialog
    import os
    
    root = Tk()
    #메모장이름
    root.title("메모장")
    #메모장 사이즈
    root.geometry("1000x800")
    
    #TEXT 위젯을
    text_area = Text(root, font=("Helvetica", 12))
    text_area.pack(fill=BOTH, expand=1)
    
    #새로 만들기
    def new_file():
        global file_path
        file_path = None  
        text_area.delete("1.0", END)
        root.title("*제목 없음") 
    
    #파일 열기 함수
    def open_file():
        file_path = filedialog.askopenfilename()
        with open(file_path, "r") as file:
            content = file.read()
            text_area.delete("1.0", END)
            text_area.insert(END, content)
        #새로 가져온 파일의 이름으로 메모장 이름 바꾸기
        file_name = os.path.basename(file_path)
        root.title(f"{file_name}")
    
    #파일 저장 함수
    def save_file():
        file_path = filedialog.asksaveasfilename(defaultextension=".txt")
        content = text_area.get("1.0", END)
        with open(file_path, "w") as file:
            file.write(content)
        #새로 저장한 파일의 이름으로 메모장 이름 바꾸기
        file_name = os.path.basename(file_path)
        root.title(f"{file_name}")
    
    #글자 수 세기
    def auto_count_chars(event=None):
        char_count = len(text_area.get("1.0", END))
        char_count_n = len(text_area.get("1.0", END).replace("\n", ""))
        status_bar.config(text=f"띄어쓰기 제외한 글자수: {char_count_n}, 띄어쓰기 포함한 글자수 : {char_count}")
    
    
    
    menu_bar = Menu(root)
    #메뉴 버튼들 셋팅
    file_menu = Menu(menu_bar, tearoff=0)
    file_menu.add_command(label="새로 만들기(W)", command=new_file)
    file_menu.add_command(label="열기(O)", command=open_file)
    file_menu.add_command(label="저장(S)", command=save_file)
    file_menu.add_separator()
    file_menu.add_command(label="끝내기(X)", command=root.quit)
    menu_bar.add_cascade(label="파일(F)", menu=file_menu)
    
    #메뉴 버튼 추가
    root.config(menu=menu_bar)
    text_area.bind("<KeyRelease>", auto_count_chars)
    
    status_bar = Label(root, text="띄어쓰기 제외한 글자수: 0, 띄어쓰기 포함한 글자수: 0")
    status_bar.pack(side=BOTTOM, fill=X)
    
    #메모장 실행
    root.mainloop()

    전체 코드를 업로드 했습니다.

    오늘은 새로 만들기, 글자 수 자동으로 확인하기, 메모장 타이틀 바꾸기를 추가했습니다.

    다음 포스팅은 다른 기술을 추가해 보도록 하겠습니다.

    memo1.py
    0.00MB

    함께 보면 좋은 글

     

    파이썬 메모장 만들기 1편

    파이썬 메모장 만들기 1편 안녕하세요 밤구름 입니다. 이번 포스팅은 파이썬을 통한 메모장 만드는 방법에 대해서 알아보려 합니다. 지금부터 하나씩 차근차근 알아보겠습니다. 1.메모장 구성하

    cloud-library.tistory.com

     

     

    파이썬 기초 알아보기

    파이썬 기초 알아보기 0.특징 파이썬은 세미콜론(;)을 사용하지 않습니다. 파이썬은 매우 빠른 속도를 가지고 있습니다. 파이썬은 배우기 쉬운 언어 중의 하나입니다. 파이썬을 사용하면 다양한

    cloud-library.tistory.com

     

     

    파이썬 자동화 pyautogui 기초

    1.설치 터미널에 pip install pyautogui를 설치 합니다. 2.pyautogui 사용법 import pyautogui import time pyautogui를 임포트 합니다. - pyautogui 자동화를 위해 사용하는 모듈 time을 임포트 합니다. - time은 시간 제어

    cloud-library.tistory.com

     

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기