messagebox

messagebox برای نمایش کادر پیام در برنامه استفاده می‌شود. این عنصر با فراهم آوردن تعدادی تابع، امکان نمایش پیام مناسب را فراهم می‌آورد. به شکل ساده، نحوه استفاده این عنصر به شکل زیر است:

messagebox.FunctionName(title, message [, options])

در کد بالا FunctionName، نام تابع مناسب برای نمایش پیام می‌باشد، که به جای آن باید از یکی از توابع زیر استفاده کرد:

  • ()showinfo
  • ()showwarning
  • ()showerror
  • ()askquestion
  • ()askokcancel
  • ()askyesno
  • ()askretrycancel

توابع بالا پارامترهایی می‌گیرند که در جدول زیر، به آنها اشاره شده است:

پارامتر توضیح
Title متن نوار عنوان را مشخص می‌کند.
message متنی که باید به عنوان پیام نمایش داده شود.
options می‌تواند برای تنظیم گزینه‌های مختلف استفاده شود تا تغییراتی در نحوه نمایش کادر پیام ایجاد شود. برخی از این تنظیمات گزینه‌های default و parent هستند. default برای مشخص کردن دکمه پیش فرض استفاده می‌شود. از قبیل: ABORT،RETRY یا IGNORE. گزینه parent برای مشخص کردن پنجره‌ای که کادر پیام باید بر روی آن نمایش داده شود، استفاده می‌شود.

موارد گفته شده در مثال زیر خلاصه می‌شود:

  1: import tkinter
  2: from tkinter import messagebox
  3: 
  4: # hide main window
  5: root = tkinter.Tk()
  6: root.withdraw()
  7: 
  8: # message box display
  9: messagebox.showerror("Error", "Error message")
 10: messagebox.showwarning("Warning","Warning message")
 11: messagebox.showinfo("Information","Informative message")
 12: messagebox.askquestion("Question","askquestion message")
 13: messagebox.askokcancel("Ok Cancel","askokcancel message")
 14: messagebox.askyesno("Yes No","askyesno message")
 15: messagebox.askyesnocancel("Yes No Cansel","askyesnocancel message")

در کد بالا ما از توابع مختلف برای نمایش پیام‌های متفاوت استفاده کرده‌ایم (خطوط 15-9). در خط 6 با استفاده از تابع ()withdraw پنجره اصلی برنامه را مخفی نموده‌ایم، چون نیازی به آن نداریم. همانطور که مشاهده می‌کنید، در خط 8، تابع ()showerror باعث ایجاد پیغامی به صورت زیر می‌شود:
messagebox-in-tkinter-01
اولین آرگومان این تابع یعنی رشته error، عنوان پنجره و دومین آرگومان آن هم متن داخل پنجره یعنی Error message را مشخص می‌کند. بسته به نوع تابعی که ما استفاده می‌کنیم، هم تعداد دکمه‌ها و هم نوع آیکون پیغام هم متفاوت است. مثلاً استفاده از تابع ()askyesnocancel در خط 8، باعث ایجاد پیغامی با سه دکمه، NO ،Yes و Cansel می‌شود:
messagebox-in-tkinter-02
به آیکون متفاوت این پیغام هم توجه کنید. در شکل بالا، در حالت پیشفرض، دکمه Yes به عنوان دکمه پیشفرض می‌باشد، اگر بخواهید مثلاً دکمه No دکمه پیشفرض باشد باید از آرگومان سوم تابع ()askyesnocancel استفاده کنید که با گرفتن یک ثابت، دکمه پیشفرض را تعیین می‌کند:

messagebox.askyesnocancel("Yes No Cansel", "askyesnocancel message", default= messagebox.NO  )

با اجرای برنامه، مشاهده می‌کنید که دکمه No به صورت پیشفرض در می‌آید:
messagebox-in-tkinter-02
منظور از دکمه پیشفرض، دکمه‌ای است که با فشردن دکمه Enter صفحه کلید، آن دکمه عمل کند. کلیک بر روی دکمه‌های مختلف، مقادیر متفاوتی را در اختیار ما می‌گذارد. مثلاً کلیک بر روی دکمه‌های No ،Yes و Cancel یه ترتیب باعث بازگشت مقادیر False ،True و None می‌شود. با استفاده از مقادیر بازگشتی می‌توان فهمید که کاربر بر روی کدام دکمه کلیک کرده، و در نتیجه عملیات متفاوتی را بر هر کلیک در نظر گرفت. خطوط 9-15 کد بالا را به صورت زیر تغییر داده و برنامه را اجرا و با کلیک بر روی دکمه‌های مختلف، نتیجه را مشاهده نمایید:

result = messagebox.askyesnocancel("Yes No Cansel","askyesnocancel message", default= messagebox.NO)

if result == True:
    messagebox.showinfo('', 'Yes button clicked!')
if result == False:
    messagebox.showinfo('', 'No button clicked!')
if result == None:
    messagebox.showinfo('', 'Cancel button clicked!')

در کد بالا چون ما دکمه No را به صورت پیشفرض در آورده‌ایم در نتیجه با کلیک بر روی دکمه Enter، پیغام !No button clicked نمایش داده می‌شود.