دکمه یا Button

در این قسمت ویجت  Button  را معرفی کنیم. این ویجت یک دکمه هست که می توانید در رابط کاربری که با استفاده از tkinter ایجاد می کنید از آن استفاده نمایید. می توان برای هر دکمه تابع یا متدی نوشت که وقتی دکمه توسط کاربر کلیک شد اتفاق مورد نظر رخ بدهد.
بهتر است که ادامه کار را با یک مثال عملی پیش ببریم:

می خواهیم یک پنجره یا فرم درست کنیم که وقتی کاربر روی دکمه آن کلیک می کند متن داخل label تغییر کند. به کد زیر نگاه کنید:

import tkinter 
from tkinter import *
root=tkinter.Tk()
root.geometry("300x200")
root.resizable(False,False)
def clicked():
    lbl.configure(text="Karakit")
lbl=Label(root, text="Hello")
lbl.place(height=50,width=100,x=100,y=40)
btn=Button(root, text="Click Me!", command=clicked)
btn.place(height=50,width=100,x=100,y=140)
root.mainloop()

توضیح برنامه

برای این کار ابتدا tkinter را طبق خط 1 و 2 فراخوانی می کنیم. سپس یک پنجره یا فرم به نام root ایجاد می کنیم. در خطوط 4 و 5 ابعاد پنجره را 300 در 200 پیکسل تنظیم می کنیم و ابعاد را غیر قابل تغییر می کنیم. در خط 6 و 7 یک تابع به نام clicked تعریف می کنیم، با اجرای این تابع قرار است متن لیبل به نام lbl هر چه هست به عبارت Karakit تغییر کند. این کار در خط 7 به کمک configure انجام می شود.

دقت نمایید که وقتی تابع را تعریف می کنیم هنوز لیبل lbl و دکمه btn را تعریف نکرده ایم.

در خط 8 لیبلی به نام lbl را تعریف می کنیم که متن اولیه آن عبارت است از: Hello

در خط 9 اندازه این لیبل را 50 در 100 پیکسل و موقعیت آن روی پنجره را طول 100 و عرض 40 تعیین می کنیم.

در خط 10 دکمه ای به نام btn را تعریف می کنیم که متن روی آن عبارت است از: Click Me!

در همین خط 10 می بینید که command را برابر clicked قرار دادیم. در واقع داریم می گوییم که هر وقت این دکمه کلیک شد تابع clicked اجرا بشود.

در خط 11 اندازه دکمه را 50 در 100 پیکسل تعیین کرده ایم و آن را در موقعیت طول 100 و عرض 140 قرار داده ایم.

این موقعیت نسبت به گوشه بالا سمت چپ پنجره اصلی در نظر گرفته می شود.

و در آخرین خط هم حلقه اصلی رابط کاربری را قرار داده ایم.

وقتی برنامه اجرا شود پنجره زیر را خواهیم دید:

و بعد از کلیک روی دکمه متنی که لیبل نمایش می دهد به این صورت تغییر خواهد کرد:

حالا بیایید یکی از خصوصیات خود دکمه را بعد از کلیک عوض کنیم. مثلا کاری کنیم که اگر کاربر یک بار دکمه را کلیک کرد دکمه غیرفعال شود. برای این کار کافی است یک خط به انتهای تابع clicked اضافه کنیم و خصوصیت state مربوط به دکمه btn را به disabled تغییر دهیم. برنامه به صورت زیر تغییر می کند:

import tkinter 
from tkinter import *
root=tkinter.Tk()
root.geometry("300x200")
root.resizable(False,False)
def clicked():
    lbl.configure(text="Karakit")
    btn.configure(state="disabled")
lbl=Label(root, text="Hello")
lbl.place(height=50,width=100,x=100,y=40)
btn=Button(root, text="Click Me!", command=clicked)
btn.place(height=50,width=100,x=100,y=140)
root.mainloop()

خط 8 همان خط جدیدی هست که به تابع اضافه کردیم. این بار وقتی برنامه اجرا شود و کاربر روی دکمه کلیک کند، دکمه غیر فعال خواهد شد و کاربر دیگر نمی تواند روی آن کلیک کند. در تصویر زیر می بینید که چطور دکمه غیرفعال شده است:

برنامه کابردی خروج از برنامه

در پایان می خواهیم برنامه ای بنویسیم که در آن کاربر با کلیک روی یک دکمه بتواند برنامه را ببندد. برای این کار باید دستور destroy را در تابعی قرار دهیم که موقع کلیک دکمه اجرا می شود. برنامه به شکل زیر است:

import tkinter 
from tkinter import *
root=tkinter.Tk()
root.geometry("300x200")
root.resizable(False,False)
def Terminate():
    root.destroy()
btn=Button(root, text="Exit", command=Terminate)
btn.place(height=50,width=100,x=100,y=100)
root.mainloop()

به تابعی که در خط 6 و 7 ایجاد کرده ایم توجه کنید. اسم تابع را Terminate گذاشته ایم و تنها یک دستور را در بدنه تابع قرار داده ایم.

بعد از تابع دکمه ای به نام btn را تعریف کرده ایم و تابعی که قرار است با کلیک کردن روی این دکمه اجرا شود را همان Terminate تعیین نموده ایم. بعد از اجرای برنامه اگر روی دکمه کلیک کنید خواهید دید که برنامه بسته می شود.

در قسمتهای بعدی با ویجتهای دیگری آشنا خواهیم شد که امکان تعامل کاربر با رابط را بیشتر خواهند کرد.