لیبل Label

در این قسمت قصد داریم که ویجت ساده اما کاربردی label را معرفی کنیم. این ویجت برای نمایش دادن یک متن به کاربر به کار میره و به وسیله کاربر قابل ویرایش نیست.

ابتدا یک برنامه می نویسیم که ابتدا یک پنجره ایجاد می کند و بعد یک لیبل درون پنجره قرار می دهد. در این برنامه از روش جانمایی grid استفاده شده.

import tkinter 
from  tkinter import ttk
root=tkinter.Tk()
lbl=ttk.Label(root, text="Hello Karakit")
lbl.grid(column=0, row=0)
root.mainloop()

در خط 1 تا 3 مثل قسمت اول یک پنجره ایجاد کردیم و اسم آن را root گذاشتیم. در خط 4 یک لیبل ایجاد کردیم به نام lbl و داخل پرانتز دو پارامتر را تنظیم کردیم. اول مشخص کردیم که این لیبل داخل پنجره root قرار دارد. در واقع ویجت والد این لیبل root هست. دومین پارامتر متنی هست که قرار است این لیبل نمایش بدهد که در اینجا Hello Karakit هست. در خط بعد با استفاده از grid مشخص می کنیم که این ویجت لیبل در چه سطر و ستونی قرار بگیرد. و در پایان هم حلقه اصلی برای اجرا شدن رابط کاربری ایجاد شده.

با اجرای برنامه با چنین پنجره ای مواجه می شویم:

همان طور که می بینید ظاهر چندان جالبی ندارد که به علت جانمایی grid است. به جای grid از pack هم می توانیم استفاده کنیم که باز هم نتیجه چندان متفاوتی نخواهید دید.

import tkinter 
from  tkinter import ttk
root=tkinter.Tk()
lbl=ttk.Label(root, text="Hello Karakit")
lbl.pack()
root.mainloop()

حالا می خواهیم رابط کاربری شکیل تر با کمک روش جانمایی place ایجاد کنیم. با توجه به مطالبی که در قسمت 1 اموزش Tkinter گفته شد با استفاده از دستور geometry ابعاد پنجره را 200 در 300 تنظیم می کنیم و بعد با تنظیم ویژگی resizable  نمی گذاریم که کاربر بتواند ابعاد پنجره را تغییر دهد. سپس لیبل را ایجاد می کنیم و متن آن را برابر Hello Karakit قرار می دهیم و رنگ بکگراند را زرد می کنیم. دردستورplace  اندازه لیبل را 100 در 50 و مکان گوشه بالا و سمت چپ لیبل را 100 و 40 تعیین می کنیم. در آخر هم طبق معمول حلقه اصلی را اجرا می کنیم.

import tkinter 
from  tkinter import ttk
root=tkinter.Tk()
root.geometry("300x200")
root.resizable(False,False)
lbl=ttk.Label(root, text="Hello Karakit", background='yellow')
lbl.place(height=50,width=100,x=100,y=40)
root.mainloop()

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

حالا فرض کنیم که قصد نداریم از ویجت های ttk استفاده کنیم. برای این کار دیگر ttk را در خط 2 فراخوانی نمی کنیم و برنامه به شکل زیر تغییر می کند:

import tkinter 
from tkinter import *
root=tkinter.Tk()
root.geometry("300x200")
root.resizable(False,False)
root.title("label")
lbl=Label(root, text="Hello Karakit",bg="yellow")
lbl.place(height=50,width=100,x=100,y=40)
root.mainloop()

در خط 7 مشخص است که نوع تعریف لیبل و پارامترها با حالت قبل تفاوت دارد.

نتیجه اجرای برنامه را در تصویر زیر یم توانید مشاهده کنید:

یک نکته مهم درباره تعیین مشخصات و پارامترهای یک ویجت این است که لازم نیست حتما موقع تعریف ویجت انها را تنظیم کنیم. با استفاده از configure می توانیم بعدا در صورت نیاز ویژگیها رو تعیین کنیم یا تغییر بدیم. مثلا در برنامه بالا 1 خط قبل از حلقه نهایی اضافه کردیم تا مت نبه رنگ قرمز نمایش داده شود:

import tkinter 
from tkinter import *
root=tkinter.Tk()
root.geometry("300x200")
root.resizable(False,False)
root.title("label")
lbl=Label(root, text="Hello Karakit",bg="yellow")
lbl.place(height=50,width=100,x=100,y=40)
lbl.configure(fg="red")
root.mainloop()

نتیجه در شکل زیر پیداست:

در صورتی که بخواهیم کادر دور لیبل مشخص شود باید ویژگی relief را تنظیم کنیم و آن را برابر یکی از مقادیر زیر قرار دهیم:

Flat , raised, sunken, ridge, solid, groove

با اجرای برنامه زیر خواهیم دید که هر کدام به چه صورت دیده می شوند:

import tkinter 
from tkinter import *
root=tkinter.Tk()
root.geometry("260x280")
root.resizable(False,False)
lblFlat=Label(root, text="flat",bd=2,relief="flat")
lblFlat.place(height=30,width=60,x=100,y=10)
lblRaised=Label(root, text="raised",bd=2,relief="raised")
lblRaised.place(height=30,width=60,x=100,y=50)
lblSunken=Label(root, text="sunken",bd=2,relief="sunken")
lblSunken.place(height=30,width=60,x=100,y=90)
lblRidge=Label(root, text="ridge",bd=2,relief="ridge")
lblRidge.place(height=30,width=60,x=100,y=130)
lblSolid=Label(root, text="solid",bd=2,relief="solid")
lblSolid.place(height=30,width=60,x=100,y=170)
lblGroove=Label(root, text="groove",bd=2,relief="groove")
lblGroove.place(height=30,width=60,x=100,y=210)
root.mainloop()

تغییر فونت

حالا یک برنامه خیلی کوتاه می نویسیم که فونت لیبل را به دلخواه خود در آن تعیین کرده ایم:

import tkinter as tk
import tkinter.font as tkFont

root = tk.Tk()
root.title("Karakit font example")
root.geometry("300x200")
root.resizable(False,False)

normal_font = tkFont.Font(family="Helvetica", size=11)
bold_font = tkFont.Font(family="Arial", size=12, weight="bold")
italic_font = tkFont.Font(family="Courier", size=14, slant="italic")  

label_1 = tk.Label(root, text='Helvica 11 Normal', font=normal_font)
label_1.place(height=30, width=200, x=50, y=30)    

label_2 = tk.Label(root, text='Arial 12 Bold', font=bold_font)
label_2.place(height=30, width=200, x=50, y=80)

label_3 = tk.Label(root,  text='Courier 14 Italic', font=italic_font)
label_3.place(height=30, width=200, x=50, y=130)

root.mainloop()

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

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

آموزشهای ابزار طراحی GUI در پایتون: tkinter