استعمال grid() Method للتحكم في أماكن widgets

سنتعلم الآن كيف تغيير العناصر التي قمنا بتكوينها و وضعها في الأماكن التي نرغب فيها.


الطرق السابقة و التي كانت تعتمد على ()pack تتميز بالسهولة الكبيرة و لكنها لا تسمح لنا بالتحكم في مكان كل عنصر و في أقصى الحالات كنا سنحصل على شكل مشابهه لهذا البرنامج

from Tkinter import *
fen1 = Tk()
txt1 = Label(fen1, text = 'Premier champ :')
txt2 = Label(fen1, text = 'Second :')
entr1 = Entry(fen1)
entr2 = Entry(fen1)
txt1.pack(side =LEFT)
txt2.pack(side =LEFT)
entr1.pack(side =RIGHT)
entr2.pack(side =RIGHT)
fen1.mainloop()

و التي تمكننا من الحصول على الشكل التالي:



في حين يمكننا اعادة ضبط الأماكن كهذا المثال:

from Tkinter import *
fen1 = Tk()
txt1 = Label(fen1, text = 'Premier champ :')
txt2 = Label(fen1, text = 'Second :')
entr1 = Entry(fen1)
entr2 = Entry(fen1)
txt1.grid(row =0)
txt2.grid(row =1)
entr1.grid(row =0, column =1)
entr2.grid(row =1, column =1)
fen1.mainloop()

كما ترون قسمنا النافذة لأربعة عناصر في السطر الأول نجد label الذي قمنا بتجهزه يليه خانة النص و في السطر الثاني نجد نفس اﻷمر.


و الآن يمكننا في صنع شيء أكثر تعقيدا  حيث سنقوم بادخال رسم إلى جانب البرنامج كما في الصورة الرئيسية

# -*- coding:Latin-1 -*-
from Tkinter import *
fen1 = Tk()
# création de widgets 'Label' et 'Entry' :
txt1 = Label(fen1, text ='Premier champ :')
txt2 = Label(fen1, text ='Second :')
txt3 = Label(fen1, text ='Troisième :')
entr1 = Entry(fen1)
entr2 = Entry(fen1)
entr3 = Entry(fen1)
# création d'un widget 'Canvas' contenant une image bitmap :
can1 = Canvas(fen1, width =400, height =400, bg ='white')
photo = PhotoImage(file ='redhat-reborn.gif')
item = can1.create_image(200, 200, image =photo)
# Mise en page à l'aide de la méthode 'grid' :
txt1.grid(row =1, sticky =E)
txt2.grid(row =2, sticky =E)
txt3.grid(row =3, sticky =E)
entr1.grid(row =1, column =2)
entr2.grid(row =2, column =2)
entr3.grid(row =3, column =2)
can1.grid(row =1, column =3, rowspan =3, padx =10, pady =5)
# démarrage :
fen1.mainloop()
لكي يعمل السكريبت يجب تغيير اسم الصورة بصورة أخرى من جهازك بحيث تكون في نفس المكان الذي يوجد به نص البرنامج و أن تكون الصورة من نوع gif لأن tkinter لا يقبل سوى عدد محدود من صيغ الصور.

كما يمكنك تعديل حجم الصورة بما يتلائم مع الصورة التي اخترتها, و نلاحظ أننا اعتمدنا على canevas لوضع الصورة حيث لا يمكننا ادخالها مباشرة, في canevas يمكنك تغيير الخلفية bg ='white' ب gray لتصبح في نفس لون البرنامج و بالتالي مخفية.

بالنسبة sticky =E فيمكن أن تأخذ إحدى القيم التالية N,S,E,W أي أسماء الإتجهات بالأنجليزية و هي تمكننا من وضعها أعلى قليلا أو أسفل قليلا و هكذا بحسب القيمة التي نعطيه إياها - يمكنك تجربة مختلف القيّم على البرنامج لمعرفة تأثيرها.

و أخيرا بالنسبة للسطر 
can1.grid(row =1, column =3, rowspan =3, padx =10, pady =5)
فيعني أن canvas الذي سنضع في الصورة سيكون بالسطر الأول العمود الثالث و rowspan تعني أنه يمتد على كامل الأسطر الثلاث
و القيمتين اﻷخيرين يعنيان المسافة الفاصلة بين canevas و widget طولا و عرضا.

أرجو أنكم استمتعتم!!