반응형

@32 : 메모장 만들기

 

1. 메뉴를 갖춘 윈도우 만들기

2. 텍스트를 쓸 수 있는 텍스트 창 추가하기

3. 각 메뉴 기능 넣기 (새 파일, 저장, 만든 이)


1. 메뉴를 갖춘 윈도우 만들기

from tkinter import *
from tkinter.filedialog import *

# 각 메뉴가 클릭됐을 때 실행될 함수 정의
def new_file():
    pass

def save_file():
    pass

def maker():
    pass

# 윈도우 생성
window = Tk()
window.title('My Notepad')
window.geometry('400x400+800+300')
window.resizable(0,0)

# 메뉴 생성
menu = Menu(window)
# 첫 번째 메뉴 생성
menu_1 = Menu(menu, tearoff=0)
# 첫 번째 메뉴의 세부 메뉴 추가, 함수 연결
menu_1.add_command(label = '새 파일', command=new_file)
menu_1.add_command(label = '저장', command = save_file)
# 줄 추가
menu_1.add_separator()
menu_1.add_command(label='종료', command=window.destroy)
# 메뉴바에 추가
menu.add_cascade(label='파일', menu=menu_1)

# 두 번째 메뉴 생성
menu_2 = Menu(menu, tearoff=0)
# 세부 메뉴 추가, 함수 연결
menu_2.add_command(label = '만든 이', command = maker)
# 메뉴바에 추가
menu.add_cascade(labe='정보', menu=menu_2)

# 메뉴 구성
window.config(menu=menu)

window.mainloop()

 

결과.

add_command : 메뉴 생성 및 연계 함수 추가

add_seperator : 구분선 추가

add_cascade : 계층연결, 하위메뉴를 상위메뉴와 연결

 

tearoff 메뉴 : 메뉴 최상단에 점선이 만들어짐. 아마 하위메뉴로 내려갈 때 구분하기 위함일 듯?

 


2. 텍스트를 쓸 수 있는 텍스트 창 추가하기

from tkinter import *
from tkinter.filedialog import *

# 각 메뉴가 클릭됐을 때 실행될 함수 정의
def new_file():
    pass

def save_file():
    pass

def maker():
    pass

# 윈도우 생성
window = Tk()
window.title('My Notepad')
window.geometry('400x400+800+300')
window.resizable(0,0)

# 메뉴 생성
menu = Menu(window)
# 첫 번째 메뉴 생성
menu_1 = Menu(menu, tearoff=0)
# 첫 번째 메뉴의 세부 메뉴 추가, 함수 연결
menu_1.add_command(label = '새 파일', command=new_file)
menu_1.add_command(label = '저장', command = save_file)
# 줄 추가
menu_1.add_separator()
menu_1.add_command(label='종료', command=window.destroy)
# 메뉴바에 추가
menu.add_cascade(label='파일', menu=menu_1)

# 두 번째 메뉴 생성
menu_2 = Menu(menu, tearoff=0)
# 세부 메뉴 추가, 함수 연결
menu_2.add_command(label = '만든 이', command = maker)
# 메뉴바에 추가
menu.add_cascade(labe='정보', menu=menu_2)

# 텍스트 창 추가하기 --------------------------------------
text_area = Text(window)
# 공백설정
window.grid_rowconfigure(0, weight=1)
window.grid_columnconfigure(0, weight=1)
# 화면배치, 동서남북으로 모두 붙인다. 
text_area.grid(sticky = N+E+S+W)
#---------------------------------------------------------

# 메뉴 구성
window.config(menu=menu)

window.mainloop()

결과.

- 좌우공백을 0으로 해서 오른쪽에서 끝난 숫자가 다음줄에서 바로 이어진다.

- window.grid_columnconfigure(100, weight=1) 로 하면,

- 오른쪽으로 45678 정도 더 나가는 것을 확인할 수 있다.


- 동서남북으로 안 붙이면 현재 코드에서는 위, 아래가 뜬다.

- text_area.grid()

- 이 때, 윈도우의 resizable을 (1,1) : 가로세로 모두 True로 하면,

- 화면을 늘렸을 때, text_area가 가운데 위치하고 상,하,좌,우로 모두 떨어진다.


3. 각 메뉴 기능 넣기

# 각 메뉴가 클릭됐을 때 실행될 함수 정의
# 새 파일
def new_file():
    # 텍스트 영역 지우기
    text_area.delete(1.0, END)

# 저장    
def save_file():    
    # 파일 저장 물어보기
    f = asksaveasfile(mode='w', defaultextension='.txt', filetypes=[('Text files', '.txt')])
    # 텍스트 영역에 있는 것들을 문자화 시켜서 저장하는 듯.
    text_save = str(text_area.get(1.0, END))
    f.write(text_save)
    f.close()                    

# 만든 이
def maker():
    # 새 창 만들고 내용 적기
    help_view = Toplevel(window)
    help_view.geometry('300x50+850+400')
    help_view.title('만든 이')
    lb = Label(help_view, text = '\n파이썬과 40개의 작품들 메모장 만들기')
    lb.pack()

결과.

1. 새 파일 : 잘 됨

2. 저장 : 잘 됨

3. 만든 이 : 잘 됨


메모장을 완성하였다.

흠~

 

뭔가 PYQT인지 QTPY인지를 써 보고 싶다.

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