시작하기에 앞서
인프런 강의 링크 (나도코딩)
https://www.inflearn.com/course/%EB%82%98%EB%8F%84%EC%BD%94%EB%94%A9-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%99%9C%EC%9A%A9%ED%8E%B8-2/
[지금 무료]파이썬 무료 강의 (활용편2) - GUI 프로그래밍 (4시간) 강의 | 나도코딩 - 인프런
나도코딩 | , 파이썬(Python) 입문자 탈출, GUI 프로그래밍으로 재미있게 실력을 다져보세요! 강의 소개 🎮 많은 분들이 파이썬 기초까지는 잘 배우지만, 1. 초보를 벗어나 중급자로 실력을 키우려
www.inflearn.com
나도코딩 님의 GUI 프로그래밍 강의를 통해 배운 내용을 토대로 퀴즈(메모장 만들기)를 진행하려고 한다. (+학습한 내용 정리까지)
강의 속 세부적인 내용들은 저작권에 위배될 수 있으니 생략하겠다.
1. 제목과 창 크기
from tkinter import *
root = Tk()
root.title("제목 없음 - Window 메모장")
root.geometry("320x240")
root.mainloop()
- title을 사용하여 실제 Window 메모장의 느낌처럼 제목을 설정했다.
- 창 크기는 geometry 사용하여 width와 height 설정
- 사용자가 창 크기를 임의로 조절해야 하니 resizable(False, False) 생략함
2. 메뉴
menu = Menu(root)
menu_file = Menu(menu, tearoff=0)
menu_file.add_command(label="열기")
menu_file.add_command(label="저장")
menu_file.add_separator() # 구분자
menu_file.add_command(label="끝내기", command=root.quit)
menu.add_cascade(label="파일", menu=menu_file)
root.config(menu=menu)
파일 메뉴의 열기, 저장, 끝내기를 만들어줬다. (다른 메뉴들은 생략하겠다.)
기능들을 구현하기에 앞서 저장되고 열릴 파일 이름을 설정해줬다.
# 열기, 저장 파일 이름 설정
filename = "CALKODING.txt"
## 중간 코드 생략 ##
menu_file.add_command(label="열기", command=open_file)
menu_file.add_command(label="저장", command=save_file)
기능을 실행하기 위해 아래의 열기와 저장에 관한 함수를 command에 연결해줬다.
저장 기능 먼저 설명하겠다.
저장 기능
import os
def save_file():
with open(filename, "w", encoding="utf8") as file:
file.write(txt.get("1.0", END)) # 모든 내용을 가져와서 저장
텍스트 영역의 내용이 CALKODING.txt 파일로 저장되었다.
열기 기능
import os
def open_file():
if os.path.isfile(filename) :
with open(filename, "r", encoding="utf8") as file:
txt.delete("1.0", END) # 기존 내용 삭제 후
txt.insert(END, file.read()) # 파일 내용을 본문에 불러오기
CALKODING.txt 파일이 있으면 파일의 내용을 프로그램에 불러오는 기능
현재는 일반적인 불러오기 기능으로 구현하지 않았기 때문에 기존 텍스트 영역을 삭제하고 해당 파일의 내용을 덮어씌우는 식으로 구현했다.
(아쉽게도 해당 파일이 없을 때 경고문을 띄워주는 기능은 구현하지 않았다.)
기존에 텍스트 내용들이 삭제되고 CALKODING.txt에 저장된 텍스트가 보여지는 모습이다.
os 기능 관련 정리
기능 | 코드 예시 | 설명 |
파일 존재 확인 | os.path.isfile(path) | 파일이 있으면 True |
폴더 존재 확인 | os.path.isdir(path) | 폴더가 있으면 True |
경로 결합 | os.path.join(a, b) | a/b 식으로 경로를 합쳐줌 (운영체제에 맞게 자동 조정) |
파일 삭제 | os.remove(path) | 파일 삭제하기 |
폴더 생성 | os.mkdir(path) | 새 폴더 만들기 |
아직은 내가 os 기능에 관하여 숙달되지 않았기 때문에
인터넷 검색 후 간략하게 정리해봤다
3. 텍스트 영역과 스크롤 바
텍스트 영역
txt = Text(root)
txt.pack(side="left", fill="both", expand=True)
스크롤 바를 생각해서 side 값을 왼쪽으로 준 뒤, 텍스트 영역을 꽉 채우기 위해 fill="both" 와 expand=True 값을 설정했다.
스크롤 바
scrollbar = Scrollbar(root)
scrollbar.pack(side="right", fill="y")
허나 코드를 이렇게만 작성하면 문제가 발생한다.
- 스크롤 바를 움직여도 다시 처음 자리로 자동 이동되는 것.
- 텍스트 영역과 스크롤 바가 연동이 되지 않는다는 것.
문제 해결 과정
1. 텍스트 영역 코드에 yscrollcommand=스크롤_바_변수.set 을 설정해주면 된다.
txt = Text(root, yscrollcommand=scrollbar.set)
2. 스크롤 바에 config를 사용 (스크롤 바는 y축 이동으로 설정)
scrollbar.config(command=txt.yview)
마치며
Tkinter를 사용하여 메모장의 기능을 간략하게 구현해봤다.
포스팅 글을 작성하면서 아직은 정리하는 능력이 부족하다는 것을 느꼈다.
얼른 더 학습하여 나만의 GUI 프로그램을 만들 수 있기를..!
'STUDY > Python' 카테고리의 다른 글
Python의 Zip 함수를 활용한 2차원 배열 전환 방법 (0) | 2024.03.19 |
---|