반응형
@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인지를 써 보고 싶다.
반응형
최근댓글