이전 포스팅
2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 26. GUI에 탭(Notebook) 생성하기
이번 포스팅에서는 : 다양한 메시지박스 생성하기
가장 기본적인 메시지박스를 만드는 방법부터 알아봅시다.
메인윈도우 창도 master나 parent 파라미터도 필요없고, mainloop()을 실행할 필요도 없이
창 하나만 띄워주는 코드들입니다.
GUI가 거의 필요없는 업무자동화 코드라고 하더라도
파일목록을 선택하는 다이얼로그는 필요한 경우가 많이 있지요.
from tkinter.messagebox import Message
Message(parent=None, title="타이틀", message="메시지").show()
임포트문을 제외하면 딱 한 줄의 명령어입니다.
실행해볼까요?
간단하게 Message 인스턴스를 생성하고, show() 메서드로 창을 띄웠습니다.
창 안에 나타난 파란 i 모양의 아이콘은 icon 인자의 파라미터로 기본값은 icon="info" 이며,
"info", "warning", "error", "question" 네 개 중 하나를 선택할 수 있습니다.
또한 parent=None 파라미터는 생략 가능한데,
다른 위젯들의 첫 번째 파라미터가 master인 데 반해,
메시지박스는 일반적으로 상위위젯이나 메인윈도우를 선택할 때
master 대신 parent 인자로 입력합니다.
메시지박스에는 이밖에도 여러 가지 심플한 다이얼로그를 기본으로 제공하고 있는데,
몇 가지만 더 보여드리겠습니다. 필요한 곳에 활용하시면 되겠습니다.
아래의 다섯 개 다이얼로그는 창을 띄우기 위한 show() 메서드가 필요없습니다.
1. askquestion ("yes" or "no")
from tkinter.messagebox import askquestion
askquestion(title="타이틀", message="메시지")
2. askyesno (True or False)
from tkinter.messagebox import askyesno
askyesno(title="타이틀", message="메시지")
3. askyesnocancel (True or False or None)
from tkinter.messagebox import askyesnocancel
askyesnocancel(title="타이틀", message="메시지")
4. askokcancel (True or False)
from tkinter.messagebox import askokcancel
askokcancel(title="타이틀", message="메시지")
5. askretrycancel (True or False)
from tkinter.messagebox import askretrycancel
askretrycancel(title="타이틀", message="메시지")
위의 다이얼로그들은 버튼선택결과를 문자열 또는 불리언값으로 리턴하므로
아래처럼 결과값을 변수에 담아서 이후 프로세스를 진행할 수 있습니다.
from tkinter.messagebox import askyesno
answer = askyesno(title="이경영", message="재밌구만.\n진행시켜!")
if answer:
print("진행하지 못했습니다.")
else:
print("진행하지 않았습니다.")
파일/폴더를 고르는 다이얼로그
이밖에도 tkinter.filedialog에서는 파일/폴더를 선택하기 위한 다양한 기본 다이얼로그를 제공하고 있습니다.
1. 한 개의 파일을 고르는 다이얼로그 : askopenfilename
from tkinter.filedialog import askopenfilename
filename = askopenfilename(initialdir="/", title="파일을 선택하세요.",
filetypes=(("jpeg files", "*.jpg"), ("all files", "*.*")))
print(filename)
2. 여러 개의 파일을 고르는 다이얼로그 : askopenfilenames
from tkinter.filedialog import askopenfilenames
filenames = askopenfilenames(initialdir="/", title="파일을 선택하세요.",
filetypes=(("jpeg files", "*.jpg"), ("all files", "*.*")))
print(filenames)
이밖에도 askdirectory나 saveasfilename 등 여러 가지 다이얼로그가 제공되고 있습니다.
다이얼로그를 메인윈도우에 포함시키려면?
위의 다이얼로그 창을 메인윈도우 메뉴 커맨드를 통해 여는 간단한 예제를 보여드리겠습니다.
메뉴바에 "도움말 - About" 이라는 메뉴를 만들고, About을 클릭하면 다이얼로그창이 열리는 예제입니다.
import tkinter as tk
from tkinter.messagebox import Message
from tkinter import Menu
def 메시지박스():
Message(title="타이틀", message="메시지").show()
메인윈도우 = tk.Tk()
메뉴바 = Menu(메인윈도우)
메인윈도우.config(menu=메뉴바)
도움말 = Menu(메뉴바, tearoff=False)
도움말.add_command(label="About", command=메시지박스)
메뉴바.add_cascade(label="도움말", menu=도움말)
메인윈도우.mainloop()
실행해보면
의도한 대로 잘 실행되네요.
마지막으로, 입력값을 받는 tkinter.simpledialog
tkinter에서는 버튼만 누르는 다이얼로그창이 아니라,
정수, 문자열 및 실수를 입력받을 수 있는 다이얼로그도 (다행히) 기본제공하고 있습니다.
(물론 이를 프레임 안에 넣어서 직접 제작하는 것도 가능하지만, 다소 번거로운 일입니다.)
1. 문자열을 입력받는 다이얼로그 : askstring
from tkinter.simpledialog import askstring
input_ = askstring(title="문자열 입력", prompt="문자열을 입력하세요.")
print(input_)
2. 정수를 입력받는 다이얼로그 : askinteger
from tkinter.simpledialog import askinteger
input_ = askinteger(title="정수 입력", prompt="정수를 입력하세요.")
print(input_)
3. 실수를 입력받는 다이얼로그 : askfloat
from tkinter.simpledialog import askfloat
input_ = askfloat(title="실수 입력", prompt="실수를 입력하세요.")
print(input_)
마치며
tkinter에서 다이얼로그 창을 생성하는 기본적인 방법을 알려드렸습니다.
tkinter.messagebox, tkinter.filedialog 및 tkinter.simpledialog에서 제공하는 다이얼로그 중 일부를 보여드렸지만,
이밖에도 tkinter에서 제공하는 여러 클래스를 통해 다양한 다이얼로그를 직접 조합하여 제작할 수도 있습니다.
블로그에 댓글이나 방명록으로 질문 남겨주시면 제 역량 내에서 성의껏 답변 드리도록 하겠습니다.
tkinter는 업데이트를 거듭하면서 다른 유명한 GUI프레임워크인 PyQt나 wxPython 등에 뒤지지 않을 정도로
다양한 위젯과 다이얼로그를 기본제공하고 있습니다. 게다가 코드도 굉장히 간단합니다.
조금 더 깊이 공부하고자 하시는 분은 파이썬 공식문서 중 tkinter 파트를 참고하시거나,
유튜브의 다양한 튜토리얼을 검색해 보시면 좋겠습니다. (재미있게도 인도 유튜버가 가장 많은 것 같습니다.)
다음 포스팅
2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 28. 메인윈도우에 아이콘 추가하기
'GUI 튜토리얼 > tkinter 한꼬집씩만 따라해보기' 카테고리의 다른 글
28. 메인윈도우에 아이콘 추가하기 (0) | 2022.11.28 |
---|---|
26. GUI에 탭(Notebook) 생성하기 (0) | 2022.11.20 |
25. 메뉴바의 종료버튼으로 프로그램 종료하기 (0) | 2022.11.20 |
댓글