جدید آموزش ایجاد رابط گرافیکی کاربر (GUI) در پایتون به وسیله Tkinter قسمت 8 – message box
کادر پیغام یا message box
در این قسمت قصد داریم نحوه اعلام و نمایش پیغام در tKinter را آموزش دهیم. در tKinter سه نوع پیغام قابل نمایش است. نوع اول صرفا اطلاعاتی را به کاربر نمایش می دهد.
نوع دوم هشدار یا خطایی را به کاربر نشان می دهد.
نوع سوم ضمن نمایش پیغام، می تواند با استفاده از چند دکمه از کاربر پاسخ دریافت کند.
مجموعا 8 تابع مختلف برای نمایش انواع پیغامها در tKinter وجود دارد که قالب کلی دستورات آنها مشابه هم است و دو مورد قابل تنظیم در این دستورات عنوان پیغام و متن پیغام است. در ادامه با مثالهای ساده آنها را توضیح خواهیم داد.
نمایش اطلاعات با showinfo
به برنامه زیر توجه کنید:
import tkinter as tk from tkinter import * from tkinter import messagebox root=tk.Tk() root.geometry("300x200") root.resizable(False,False) def showinformation(): tk.messagebox.showinfo(title='karakit info', message='information message is shown') btn=Button(root, text="show information", command=showinformation) btn.place(height=50,width=150,x=75,y=70) root.mainloop()
توضیح برنامه
یک تفاوت که این برنامه با برنامه های قبلی دارد در این است که در خط 3 messagebox را فراخوانی کرده ایم. در خط 9 یک دکمه به نام btn در صفحه قرار داده ایم که با فشرده شدن آن تابع showinformation فراخوانی و اجرا می شود. این تابع را در خط 7 و 8 تعریف کرده ایم. در این تابع با استفاده از دستور messagebox.showinfo یک پیغام نمایش داده می شود. عنوانی که در بالای کادر پیغام نمایش داده می شود karakit info و متن پیغام information message is show است.
با اجرای برنامه ابتدا پنجره زیر دیده می شود:
با فشردن دکمه کادر پیغام به این شکل نمایش داده می شود:
نمایش هشدار با showwarning
در واقع این نوع پیغام تفاوت عمده ای با نوع قبلی که نمایش اطلاعات بود ندارد. برنامه مربوط به این پیغام را می توانید در زیر مشاهده کنید:
import tkinter as tk from tkinter import * from tkinter import messagebox root=tk.Tk() root.geometry("300x200") root.resizable(False,False) def showwarning(): tk.messagebox.showwarning(title='karakit warning', message='warning message is shown') btn=Button(root, text="show warning", command=showwarning) btn.place(height=50,width=150,x=75,y=70) root.mainloop()
توضیح برنامه
مثل برنامه قبل در خط 9 یک دکمه به نام btn در صفحه قرار داده ایم. با فشرده شدن آن تابع showwarning فراخوانی و اجرا می شود. این تابع را 7 و 8 تعریف کرده ایم. در این تابع با استفاده از دستور messagebox.showwarning یک پیغام نمایش داده می شود. عنوانی که در بالای کادر پیغام نمایش داده می شود karakit warning و متن پیغام warning message is shown است.
با اجرای برنامه ابتدا پنجره زیر دیده می شود:
با فشردن دکمه کادر پیغام هشدار به این شکل نمایش داده می شود:
همان طور که می بینید غیر از علامت گرافیکی که در این کادر با کادر قبلی فرق دارد، تفاوت دیگری دیده نمی شود و کاربر هم نمی تواند غیر از دکمه ok دکمه دیگری را کلیک کند.
نمایش خطا با showerror
این نوع پیغام نیز تفاوت عمده ای با انواع قبلی که نمایش اطلاعات و هشدار بود ندارد. برنامه مربوط به این پیغام را می توانید در زیر مشاهده کنید:
import tkinter as tk from tkinter import * from tkinter import messagebox root=tk.Tk() root.geometry("300x200") root.resizable(False,False) def showerror(): tk.messagebox.showerror(title='karakit error', message='error message is shown') btn=Button(root, text="show error", command=showerror) btn.place(height=50,width=150,x=75,y=70) root.mainloop()
توضیح برنامه
در خط 9 یک دکمه به نام btn در صفحه قرار داده ایم. با فشرده شدن آن تابع showerror فراخوانی و اجرا می شود. این تابع را در خط 7 و 8 تعریف کرده ایم. در این تابع با استفاده از دستور messagebox.showerror یک پیغام نمایش داده می شود. عنوانی که در بالای کادر پیغام نمایش داده می شود karakit error و متن پیغام error message is shown است.
با اجرای برنامه ابتدا پنجره زیر دیده می شود:
با فشردن دکمه کادر پیغام خطا به این شکل نمایش داده می شود:
در پیغام خطا نیز غیر از علامت گرافیکی که در این کادر با کادرهای قبلی فرق دارد، تفاوت دیگری دیده نمی شود و کاربر هم نمی تواند غیر از دکمه ok دکمه دیگری را کلیک کند.
پرسش از کاربر با askquestion
تا حالا با پیغامهایی آشنا شدیم که فقط می شد درباره مساله ای به کاربر اطلاع رسانی کرد. اما 5 پیغام بعدی این قابلیت را دارند که سوالی را مطرح کنند و کاربر در پاسخ یکی از دکمه ها را کلیک کند و از این طریق یه برنامه پاسخ بدهد. اولین نوع این پیغامها با دستور messagebox.askquestion ایجاد می شوند که در ادامه با یک برنامه نحوه استفاده از آن را شرح می دهیم:
import tkinter as tk from tkinter import * from tkinter import messagebox root=tk.Tk() root.geometry("300x200") root.resizable(False,False) def ask(): ans=tk.messagebox.askquestion(title='karakit question', message='Do you like python?') if ans == 'yes': lbl.configure(text="You like python") else: lbl.configure(text="You don't like python") btn=Button(root, text="ask question", command=ask) btn.place(height=50,width=150,x=75,y=50) lbl=Label(root,text="Your answer will be shown here") lbl.place(height=50,width=150,x=75,y=120) root.mainloop()
با اجرای برنامه پنجره زیر را می بینید:
با کلیک دکمه یک کادر ظاهر می شود که از شما می پرسد پایتون را دوست دارید یا نه؟ متن لیبل با توجه به جواب شما تغییر خواهد کرد:
توضیح برنامه:
در خط 13 یک دکمه به نام btn در صفحه قرار داده ایم. با فشرده شدن آن تابع ask فراخوانی و اجرا می شود. این تابع را در خطهای 7 تا 12 تعریف کرده ایم. در این تابع با استفاده از دستور messagebox. askquestion یک سوال نمایش داده می شود و اگر کابر دکمه yes را فشار بدهد مقداری که در متغیر ans ذخیره می شود ‘yes’ و اگر دکمه no را کلیک کند مقدار ‘no’ در این متغیر ذخیره خواهد شد. عنوانی که در بالای کادر پیغام نمایش داده می شود karakit question و متن سوال Do you like python است.
سپس با یک شرط ساده بررسی می کنیم که این مقدار yes هست یا no؟ و با توجه به این مقدار متن لیبل را تغییر می دهیم.
قبول یا لغو با askokcancel
در این نوع پیغام سوالی از کاربر پرسیده می شود و دو دکمه ok و cancel نشان داده می شود که کاربر می تواند یکی از آنها را کلیک کند. در چگونگی استفاده از آن با حالت askquestion تفاوت چندانی وجود ندارد.
در ادامه برای یادگیری این نوع پیغام برنامه ای می نویسیم که با فشردن دکمه از کاربر پرسیده می شود که آیا قصد خروج از برنامه را دارد یا نه؟ اگر جواب ok بود از برنامه خارج می شود و اگر جواب cancel بود مجددا به محیط برنامه بر می گردد.
import tkinter as tk from tkinter import * from tkinter import messagebox root=tk.Tk() root.geometry("300x200") root.resizable(False,False) def ask(): ans=tk.messagebox.askokcancel(title='karakit ok cancel', message='Do you want to quit?') if ans : root.destroy() else: pass btn=Button(root, text="Quit", command=ask) btn.place(height=50,width=150,x=75,y=70) root.mainloop()
دو تفاوت مهم این برنامه با برنامه قبل این است که از messagebox.askokcancel برای نمایش کادر پیغام استفاده می شود و این بار خروجی این پیغام که در متغیر ans ذخیره می گردد متنی نیست، بلکه اگر کاربر دکمه ok را کلیک کنیک این مقدار True و اگر cancel را انتخاب کند این مقدار False خواهد بود.
در شکل زیر نتیجه اجرای برنامه را می بینید:
با کلیک روی دکمه Quit کادر پیغام زیر نمایش داده می شود که کاربر می تواند یکی از 2 دکمه را کلیک کند:
بله و خیر با askyesno
اگر در برنامه قبلی به جای استفاده از messagebox.askokcancel از دستور messagebox.askyesno استفاده کنیم، به جای دو گزینه ok و cancel ، دو گزینه yes و no در اختیار کاربر قرار داده می شود و هیچ تفاوت دیگری با برنامه قبل نخواهد داشت.
تفاوت کادر پیغام در عکس زیر قابل مشاهده است:
تلاش دوباره یا انصراف با askretrycancel
دستور بعدی که برای ایجاد یک پیغام مبتنی بر تکرار یک عملیات یا انصراف از ادامه آن است messagebox.askretrycancel است. چگونگی عملکرد آن مشابه دو مورد قبلی است. اما نحوه نمایش کادر به این صورت است:
بله و خیر و انصراف با askyesnocancel
آخرین نوع پیغامی که می توان نمایش داد از طریق askyesnocancel ایجاد می شود و تنها پیغامی است که به کاربر 3 دکمه برای انتخاب ارایه می دهد. نحوه استفاده از آن در برنامه زیر مشخص شده است:
import tkinter as tk from tkinter import * from tkinter import messagebox root=tk.Tk() root.geometry("300x200") root.resizable(False,False) def ask(): ans=tk.messagebox.askyesnocancel(title='karakit yes no cancel', message='YES or No or CANCEL?') if ans: lbl.configure(text="You chose YES!") elif ans is None: lbl.configure(text="You chose CANCEL!") else: lbl.configure(text="You chose NO!") btn=Button(root, text="ask question", command=ask) btn.place(height=50,width=150,x=75,y=50) lbl=Label(root,text="Your answer will be shown here",relief="groove") lbl.place(height=50,width=200,x=50,y=120,) root.mainloop()
با اجرای برنامه پنجره زیر نمایش داده می شود و با کلیک روی دکمه یک کادر پیغام با 3 دکمه طبق شکل ظاهر می شود:
نتیجه کلیک روی دکمه yes مقدار منطقی True ، نتیجه کلیک روی دکمه No مقدار منطقی False و نتیجه کلیک روی Cancel مقدار None است. بنابراین با کلیک روی هر یک از این 3 دکمه پیغام متناظر با آن نمایش داده می شود.
آموزشهای ابزار طراحی GUI در پایتون: tkinter
- کار با فایلها در پایتون tkinter
- کار با menubutton در پایتون tkinter
- کار با ویجت text در پایتون tkinter
- کار با منوها در پایتون tkinter
- کار با Radiobutton در پایتون tkinter
- کار با checkbutton در پایتون tkinter
- کار با scale یا اسلایدر در پایتون tkinter
- کار با spinbox در پایتون tkinter
- کار با combobox در پایتون tkinter
- کار با message box در پایتون tkinter
- کار با canvas در پایتون tkinter
- کار با listbox در پایتون tkinter
- کار با متغیرها در پایتون tkinter
- کار با Entry در پایتون tkinter
- کار با دکمه در پایتون tkinter
- کار با لیبل یا برچسب درپایتون tkinter
- آشنایی اولیه با tkinter ابزار استاندارد طراحی GUI در پایتون
رضا احمدی
سلام با تشکر
آیا میتوان متن کلیدها را مثلا yes یا no را به فارسی بلی و خیر تغییر داد.
karakit
متن دکمه های پیش فرض رو نمی تونید تغییر بدید. اگر دکمه ها رو خودتون روی فرم اضافه کرده باشید می تونید متنش رو فارسی کنید.