본문 바로가기
GUI 튜토리얼/tkinter 한꼬집씩만 따라해보기

27. 다양한 메시지박스 생성하기

by 일코 2022. 11. 27.

이전 포스팅

2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 26. GUI에 탭(Notebook) 생성하기

 

26. GUI에 탭(Notebook) 생성하기

지난 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 25. 메뉴바의 종료버튼으로 프로그램 종료하기 25. 메뉴바의 종료버튼으로 프로그램 종료하기 지난 포스팅 2022.11.20 - [기타/tkinter 한

martinii.fun


 

이번 포스팅에서는 : 다양한 메시지박스 생성하기

가장 기본적인 메시지박스를 만드는 방법부터 알아봅시다.

메인윈도우 창도 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="메시지")

버튼선택에 따라 문자열 "yes", "no"를 리턴함

2. askyesno (True or False)

from tkinter.messagebox import askyesno

askyesno(title="타이틀", message="메시지")

버튼은 같은데 리턴값이 True / False임

3. askyesnocancel (True or False or None)

from tkinter.messagebox import askyesnocancel

askyesnocancel(title="타이틀", message="메시지")

버튼에 따라 True, False 및 None을 리턴함

4. askokcancel (True or False)

from tkinter.messagebox import askokcancel

askokcancel(title="타이틀", message="메시지")

확인:True, 취소:False

5. askretrycancel (True or False)

from tkinter.messagebox import askretrycancel

askretrycancel(title="타이틀", message="메시지")

다시 시도:True, 취소 : False

위의 다이얼로그들은 버튼선택결과를 문자열 또는 불리언값으로 리턴하므로

아래처럼 결과값을 변수에 담아서 이후 프로세스를 진행할 수 있습니다.

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. 메인윈도우에 아이콘 추가하기

 

28. 메인윈도우에 아이콘 추가하기

이전 포스팅 2022.11.27 - [기타/tkinter 한꼬집씩만 따라해보기] - 27. 다양한 메시지박스 생성하기 27. 다양한 메시지박스 생성하기 이전 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 26. GUI

martinii.fun

 

댓글