Tkinter Beginner Course - Python GUI Development
Summary
TLDRهذا النص هو ملخص لفيديو يشرح أساسيات مكتبة Tkinter في بيثون، التي تستخدم لبناء واجهات المستخدم الرسومية. يشجع المتحدث على استيراد المكتبة不需 تثبيت، وتشرح كيفية إنشاء نافذة بسيطة وإضافة عناصر واجهة المستخدم مثل التسميات والمربعات النصية والزرات. كما يظهر كيفية استخدام التخطيطات 'pack' و'grid' لترتيب العناصر داخل النافذة، ويتضمن توضيح على كيفية إضافة وظائف مثل الاستجابة لنقرات الزر والإدخالات من المستخدمين. يختتم المتحدث بعرض كيفية إنشاء قوائم القوائم والقوائم المتعددة والخيارات المتاحة في Tkinter.
Takeaways
- 😀 توفر مكتبة Tkinter بيئة بسيطة لبناء واجهات مستخدم رسومية في Python.
- 🛠️ Tkinter هي جزء من المجموعة الأساسية من Python ولا يتطلب تثبيت إضافي.
- 🏗️ يمكن إنشاء نافذة بسيطة باستخدام Tkinter بطريقة بسيطة مع تعيين اسم للنافذة وتشغيل حلقة الرئيسية.
- 🔑 يمكن تعيين خصائص النافذة مثل عنوانها وأبعادها باستخدام دالة geometry و property.
- 📦 يمكن إضافة عناصر واجهة المستخدم مثل التسميات (labels) والمربعات النصية (text boxes) والزرات (buttons) إلى النافذة.
- 🎨 يمكن تخصيص عناصر واجهة المستخدم بخصائص مثل النص والخط والتعبئة (padding).
- 🔲 يمكن استخدام التخطيطات pack و grid لترتيب عناصر واجهة المستخدم في النافذة.
- 🔄 يمكن استخدام دالة grid لإنشاء صفوف وصفوف من الزرات بطريقة تلقائية.
- 🛑 يمكن ربط أحداث مع دالات لإضافة وظائف مثل إظهار مربعات الرسالة أو طباعة في الكونسول عند النقر على زر.
- 🔄 يمكن استخدام دالة bind لربط أحداث مع دالات معينة مثل الضغط على مفتاح معين في النص البرمجي.
- 📁 يمكن إنشاء شريط القوائم في الأعلى مع خيارات مختلفة مثل 'ملف' و'إجراء' وربطها بوظائف معينة.
Q & A
ما هو تك إنتر (tkinter) ولماذا يُستخدم؟
-تк إنتر (tkinter) هي مكتبة تستخدم لبناء واجهات المستخدم الرسومية في بيثون. هي الطريقة الافتراضية لبناء واجهات مستخدم رسميا في بيثون وتتضمن مجموعة واسعة من العناصر الرسومية التي يمكن استخدامها لإنشاء واجهات مستخدم مبتكرة وفعالة.
لماذا يُنصح بالعدم استيراد كل العناصر من تك إنتر في وقت واحد؟
-يستحسن الممارسات البرمجية عدم استيراد كل العناصر من تك إنتر في وقت واحد لأن ذلك يمكن أن يؤدي إلى استيراد أكثر مما تحتاجه وينشئ تناقضًا أو مشاكلًا في الكود.
كيف يمكنني إنشاء نافذة بسيطة باستخدام تك إنتر؟
-يمكنك إنشاء نافذة بسيطة باستخدام تك إنتر من خلال استيراده، ثم إنشاء متغير مثل root أو window وتعيين نوع النافذة إلى tk.Tk()، وتشغيل حلقة التشغيل الرئيسية root.mainloop().
ما هي الخصائص الأساسية التي يمكن تعيينها لنافذة تك إنتر؟
-يمكنك تعيين خصائص مثل عنوان النافذة (title) وأبعادها (geometry)، التي تحدد الطول والعرض، لنافذة تك إنتر.
ما الفرق بين التخطيطات pack و grid في تك إنتر؟
--Pack هي التخطيط الافتراضي في تك إنتر التي ت允許 العناصر الرسومية (widgets) الترتيب في الأعلى والأسفل، بينما grid ت允許 الترتيب العناصر في صفوف وأعمدة، مما يسمح بتصميمات أكثر ترتيبًا وتنظيمًا.
كيف يمكنني إضافة عنصر نصي (label) إلى نافذة تك إنتر؟
-يمكنك إضافة عنصر نصي باستخدام تك إنتر من خلال إنشاء كائن label باستخدام tk.Label مع متغير parent يشير إلى النافذة الرئيسية، وتعيين الخصائص المطلوبة مثل النص والخط، ثم استخدام pack() أو grid() لوضع العلامة في النافذة.
ما هي الوظائف الأساسية للعناصر الرسومية (widgets) في تك إنتر؟
-العناصر الرسومية في تك إنتر تشمل عناصر مثل التسميات (labels)، مربعات النص (text boxes)، خانات الإدخال (entries)، الأزرار (buttons)، والمربعات الاختيارية (check buttons) التي توفر واجهة مستخدم تفاعلية للمستخدم.
كيف يمكنني إضافة وظيفة لزر في تك إنتر؟
-يمكنك إضافة وظيفة لزر في تك إنتر من خلال تعريف الدالة التي تريد تنفيذها عند النقر على الزر، ثم تمرير الدالة كمعلمة لدالة pack() أو grid() في كائن الزر.
ما هي الطريقة المثلى لتنظيم واجهة المستخدم في تك إنتر؟
-الطريقة المثلى لتنظيم واجهة المستخدم في تك إنتر هي استخدام فئات (classes) لجمع واجهة المستخدم والوظائف البرمجية معًا، مما يوفر ترتيبًا أفضل وسهولة الصيانة والتوسع.
كيف يمكنني إنشاء قائمة بزر الإغلاق في نافذة تك إنتر؟
-يمكنك إنشاء قائمة بزر الإغلاق في نافذة تك إنتر من خلال إنشاء قائمة (menu) وإضافة خيارات (commands) مثل 'Close'، ثم ربط هذا الزر بدالتين تحدد ما يحدث عند النقر عليه، مثل إغلاق النافذة أو إغلاق التطبيق.
كيف يمكنني إضافة دالة لضغط مفتاح في النافذة؟
-يمكنك إضافة دالة لضغط مفتاح في النافذة من خلال استخدام الدالة bind() على عنصر واجهة المستخدم، مثل مربع النص، وربط نوع الحدث مع الدالة التي تريد تنفيذها عند حدوث الحدث.
كيف يمكنني إضافة شريط القوائم في الأعلى لنافذة تك إنتر؟
-يمكنك إضافة شريط القوائم في الأعلى لنافذة تك إنتر من خلال إنشاء متغير مثل menubar و将它设为主窗口 (root)的一部分، ثم إضافة القوائم الفرعية (submenus) مثل 'File' أو 'Action' وربطها بوظائف معينة.
Outlines
😀 توفر Tkinter للمستخدم واجهة رسومية بسيطة
تدور النص حول كيفية استخدام Tkinter لبناء واجهات مستخدم رسومية بسيطة في Python. يبدأ الشرح بإنشاء نافذة أساسية وإعداد عنوان وأبعاد للنافذة. ثم يدخل إلى موضوع العناصر الرسومية الفردية مثل اللافتة والمربع النصي والزر، ويشرح كيفية إضافة هذه العناصر إلى النافذة واستخدام التخطيطات 'pack' و'grid' لترتيبها.
📐 تركيب العناصر الرسومية باستخدام التخطيطات 'pack' و'grid'
يشرح النص كيفية استخدام التخطيطات 'pack' و'grid' في Tkinter لترتيب العناصر الرسومية. يُظهر مثالًا على كيفية إضافة اللافتة والمربع النصي والإدخالات والزر وكيفية ترتيب الزر في صفوف باستخدام التخطيط 'grid'. ويتضمن أيضًا كيف يمكن إضافة المسافة البادئة حول العناصر لتحسين التصميم.
🖼️ إنشاء واجهة مستخدم متقدمة باستخدام التخطيط 'grid'
يتضمن النص توضيحًا على استخدام التخطيط 'grid' لإنشاء واجهة مستخدم أكثر تعقيدًا مثل محاسبة. يُظهر كيفية إنشاء إطار لمجموعة من الأزرار وترتيبها في صفوف باستخدام التخطيط 'grid'، وكيف يمكن للأزرار الامتداد لملء الصفوف. ويشرح النص أيضًا كيفية استخدام الخاصية 'sticky' لضبط ترتيب الأزرار.
🛠️ إضافة وظائف وأحداث لعناصر Tkinter
يناقش النص كيف يمكن إضافة وظائف وأحداث لعناصر Tkinter مثل النقر على زر أو التحقق من المربع. ويشرح كيفية استخدام الفئة لتنظيم واجهة المستخدم والوظائف، ويوفر مثالًا على كيفية إنشاء تطبيق بسيط يتضمن اللافتة والمربع النصي والزر والمربع الاختياري، وكيفية إرسال رسالة من المربع النصي بناءً على الاختيار المحدد.
🔑 ربط أحداث الضغط على المفتاح مع وظائف Tkinter
يشرح النص كيف يمكن ربط أحداث الضغط على المفتاح مثل 'Ctrl+Enter' بوظيفة معينة في Tkinter. ويوضح كيفية استخدام الربط 'bind' مع الأحداث الفعلية لتنفيذ وظائف عند حدوثها. ويتضمن مثالًا على كيفية تنفيذ دالة عند الضغط على 'Ctrl+Enter'.
❌ التعامل مع أحداث الإغلاق في Tkinter
يناقش النص كيفية التعامل مع حدث الإغلاق للنافذة في Tkinter، مثل طلب التأكيد من المستخدم قبل الخروج. ويشرح كيفية استخدام خاصية 'protocol' لتعيين دالة ت执行 عندما يضغط المستخدم على زر الإغلاق في النافذة.
🍽️ إنشاء شريط القوائم في Tkinter
يشرح النص كيفية إنشاء شريط القوائم في Tkinter وإضافة القوائم الفرعية والوظائف المتاحة في كل قائمة. ويتضمن مثالًا على إنشاء قائمة 'File' مع خيارات الإغلاق والقائمة 'Action' مع خيار إظهار الرسالة. ويوضح كيفية إضافة عناصر القائمة وربطها بوظائف معينة.
🧹 إزالة المحتوى من المربع النصي في Tkinter
في النص الأخير، يُظهر الشرح كيفية إنشاء زر لإزالة المحتوى من المربع النصي. ويشرح كيفية استخدام الدالة 'delete' لحذف النص من المربع النصي بناءً على المؤشرات البدائية والنهائية.
Mindmap
Keywords
💡tkinter
💡نافذة
💡تخطيط
💡عناصر واجهة المستخدم
💡الرابط
💡الفئة
💡الرابطة
💡النافذة النهائية
💡القائمة
💡الزر
Highlights
Introduction to Tkinter as a beginner course for building graphical user interfaces in Python.
Tkinter is part of the core Python stack and does not require installation.
Importing Tkinter and using it as an alias to avoid ambiguity.
Creating a basic window in Tkinter with the 'mainloop' method.
Setting window properties such as title and geometry.
Explanation of widgets in Tkinter and their functionalities.
Using layouts like 'pack' and 'grid' to organize widgets in a GUI.
Creating a label widget with custom text and font settings.
Adding a text box widget to the GUI for multi-line text input.
Difference between a text box and an entry widget in Tkinter.
Adding padding to widgets for better spacing and aesthetics.
Creating a button widget and assigning functionality to it.
Using the 'grid' layout for arranging buttons in a calculator-like grid.
Explanation of the 'place' function for manual widget placement.
Organizing the GUI within a class for better structure and functionality.
Adding interactivity with button clicks and event handling.
Creating a checkbox widget and linking it to conditional functionality.
Using keyboard shortcuts to trigger actions within the GUI.
Handling the window close event with a custom function.
Adding a menu bar to the GUI with file and action menus.
Creating a clear button to delete the content of the text box.
Final demonstration of the complete Tkinter GUI with all functionalities.
Transcripts
[Music]
what is going on guys welcome back this
video is going to be a beginner course
on tk inter we have used tk inter a
couple of times on this channel already
to build graphical user interface
applications but i never published a
video tutorial or a video course on the
very basics of tk inter so what is a
window how do we set some basic stuff up
uh what are layouts what are the
individual widgets that we can use and
so on what are their functionality how
do i do certain things certain basic
things in tk inter uh i have used tk
enter and i have explained the process
so whenever i created something and
typed some parameters i explained what
they did but i never published a full
course on the basics of tk enter which
is what i want to do today so let's
start with the fact that if you want to
use tk intro you need to import it but
you don't have to install it since it's
part of the core python stack it's a
library that is used to build graphical
user interfaces in python it's the
default way to build graphical user
interfaces with python of course you can
also go with pi qt5 for example but that
is something that you need to install
specifically tk enter is part of the
core python stack in order to use it we
just need to say import
tk enter and usually
i like to use tk as an alias so import
tk inter stk what some people like to do
in tutorials and i have done this myself
as well is to say from tk inter
import everything now this is not
considered to be best practice because
you import more than you need and it can
lead to some ambiguity and problems so
if you can avoid it
just don't do it like that just import
tk inter sdk or just import tk enter and
then always when you want to use
something for example a button you don't
say button but you say tk dot button for
example
now in order to create a window that's
quite simple we just need to say some
name for the for the window for example
root or window i'm going to call it root
and then you say
tk.tk but with a capital t and then
uh you call the constructor and then all
we do is we say root dot
main loop
not like that
root dot main loop like this
and by running the script here
we will see that we already have an
application so this is a very basic way
to just create a
simple graphical user interface window
we don't have anything in here we don't
have any uh dimensions set up we don't
have any title or anything like that but
this is the basic way to create the
window now
this window has certain properties we
can set a title we can set the geometry
and those two things are actually the
most important for the beginning so
we're going to say root dot and in order
to set the geometry we don't use a set
geometry function we just use the
geometry function and
we pass to that function a string
with the dimensions so first the x value
then the y value in this case we could
say something like 800 x
500 so it would create
a window with a width of 800 pixels and
a height of 500 pixels and of course you
can play around with that however you
want we can also swap that uh let's do
something like 500 times 500 so we have
a square more or less uh and then we can
also set the title of the window by just
saying root dot
dot title
uh my first gui for example
now if we do that
there you go you can see that we have a
title now
so those are the basics we can set the
geometry and the title uh now i want to
get right into the widgets because
that's what what uh tk intro is all
about we want to have something inside
of that window and if you want to add
something to that window you create the
object you pass this window as the
parent object and then you use a layout
to get this object or this widget into
the graphical user interface usually you
use something like pack or grid there is
also place where you can just choose the
coordinates
but usually you go with pack or with
grid which are the two layouts and we're
going to look at all of them today so uh
what we're going to do first now let's
go with a simple label a label is just a
text so let's say label equals
and then
tk.label with a capital l
and what we pass first here is the
parent object so the parent object of
the label uh the parent the parent
window the master is going to be root
itself so label is going to be part of
root and then we can set some named
parameters the text of the label is
going to be hello world for example and
then we can also pass some
design stuff like the font if we want to
define a font what we do is we say font
equals and then we pass a tuple and the
first
element of that tuple is going to be the
font family so arial for example
and the second one is going to be the
font size for example 18 points i think
it's points not pixels
i hope that's true
now if we want to get that label into
the root all we need to do is we need to
specify
um a layout that we use as you can see
we can use pack we can use grid and i
think somewhere down here should also be
uh place there you go we're going to go
with pack for now we're going to build
everything with pack for now and what we
can add here as well is a padding but
first of all let's see what it looks
like without a padding
uh not debug sorry
let me run this
again there you go we have a simple
label as you can see it's quite uh
basically
at the topmost position with a small
uh with a small padding you could say
with a small distance with a small
spacing uh what we can pass here is pad
x equals 20 for example and pad y equals
20. obviously x is for the x dimension
for the horizontal padding and y's for
the vertical
padding there you go you can see there's
a little bit more distance now so we can
do that with other uh elements as well
let's go with a simple text box
text box is going to be tk.text with a
capital t root is going to be the master
object again
then uh text you can also set a text if
you want to but usually you want the
user to input the text
what you can set for a text box is you
can set the height so you can say or
actually let's don't set the height and
see what it looks like without setting
the height but we're going to add a font
here again ariel but this time a little
bit smaller so let's say it's 16
points and then text box dot pack
and let's just do no padding for
now and you can see that it uh is the
whole it it scratches across the whole
graphical user interface and it has no
distance here uh on the horizontal
because of course
uh
we don't have any padding here so now if
i scale the window
you can see it's quite large
uh so if i want to set the height to
something specific i can also go ahead
and say okay i want the height to be
three
and then it's going to be way smaller as
you can see here it's going to be three
lines
so i can write something here i can
write something here and here and now of
course i can also go down but
then
i have to scroll
all right so
this is a basic text box we can also use
an entry if we want to an entry is
basically just a text box with height 1
without multi-line features and all that
so if you want to have a text box for a
password maybe an entry is more useful
than a text so let me maybe show you
that
my entry is going to be tk dot entry
like that part of root
and then just my entry
dot
pack
and you can see that this here is an
entry because it's one line i cannot
press enter i mean i can press enter but
nothing happens it doesn't go into
multi-line whereas here even if the
height was one i can still scroll down
uh this is the difference we're going to
use a text box here though
um and of course we can also add a
padding now maybe we don't want to have
a vertical padding because we already
have one from the label and it's fine
but maybe you want to have a horizontal
one so pedex is going to be 20
and now you can see that we have some
distance here now 20 seems to be a
little bit too much so let's go with 10
this should look fine there you go
now we can also add a button now and
we're going to talk about buttons later
on in more detail because we got to add
some functionality to the button we're
not going to do that now i'm just
showing you that you can add a button
here so a button is tk.button
and pass it to root again and the text
of the button is for example click me
and it can also have a font i'm going to
go with arial again and we can go with
18 again
and then button.pack
there you go
and you can see i can click that button
uh since there is no padding it is
exactly below directly below the text
box so we can go with some padding
pedex equals 10
and pad y equals 10 maybe you want to
have some padding here as well pad y
equals 10
and you can see now it looks a little
bit better now this function doesn't
have a functionality obviously we are
going to talk about that in a second as
i or not in a second a couple of minutes
as i already told you uh but those are
some of the widgets some of the most
important widgets we can also just type
tk dot and if you have an ide you're
going to see what you can use here so
for example
we also have a check button here
uh we have frames a frame is basically
just
a frame a an area that you can put
buttons into for example or text boxes
just widgets we have list boxes we have
menus and all that so you can play
around with that
now let's try out let's try the grid
layout because the grid layout is a
little bit more interesting when it
comes to multiple buttons for example in
a row so if you want to have a
calculator for example let's call up the
windows calculator you don't want to
have one button below the other buttons
you want to have a grid of buttons like
here so you want to have for example a
text box a label and then you want to
have some buttons here
in a grid layout if you want to do that
in python first of all i have a video on
that so you can just check out the gui
calculator with tk intro on my channel
uh but now we're just going to have a
grid of buttons and for this we're
actually going to use a button frame
so let me just think about this we're
going to use a label here in the pack
layout we're going to use a text box
with a pack layout and we're going to
add a frame so the frame is going to be
tk or actually let's call it button
frame is going to be tk.frame
the frame itself is going to be part of
root so it's going to have root as a
master
um
and that's actually the only parameter
that we pass here but then we're going
to say button frame
dot
configure or actually column configure
and here we can set
the zeroth column to have a weight of
one this is going to be important
because we want the buttons to stretch
we don't want to have three buttons in a
row and then a lot of space left and
right we want it to stretch
to fill the x-axis and we're going to
talk about that
uh in a second how exactly we're going
to do that but this is a setting that we
need we need to say column configure
for the individual rows depending on how
many rows you have obviously if you have
multiple uh actually columns sorry if
you have multiple columns uh if you have
five columns you need to do it for all
five of the columns in this case we're
going to have three columns so we're
going to do it for the three columns
here and what we're doing now is we're
going to say btn
1
is going to be tk button
and
here now we're not going to pass root as
the master we're going to pass the
button for a master master because the
button is going to be inside of the
button frame and the button frame is
going to be inside of the root so we're
going to pass button frame here and the
text is just going to be one we're not
going to have any
functionality here we're going to say
arial
and font size 18
and what we do now is we say btn
1 dot and now not pack but grit
and grid takes the parameters row and
column
so row zero and column zero basically
means first row and first column we're
in programming we start counting with
zero unless you use matlab obviously
but that's where you start so for
example we want to have the first button
in the first row and the first column so
zero zero now we also want it to be
sticky
to the west and to the east so to the
left and to the right so what we can do
is we can say sticky equals tk.w
plus tk.e i mean i think you can also
pass a string so you should also be able
to say w and e or you can also say
uh news for north e north east
west and south yes uh but i like to do
it like that tk.w plus tk dot
e for west and east so basically what we
want to have is uh maybe i'm going to
explain this with paint real quick we
don't want to have
uh a
window where we have like a text box
and then a bunch of buttons like that
right so if we have three columns here
we don't want to have a numpad like that
we want to do it more like that we want
to stretch the buttons here
of course equally sized not the way i
draw them but want them to be stretched
across the whole row
so we want it to be like that one two
three and this is why we do the sticky
uh the sticky stuff
so we can copy that now and
just
paste this uh how many times four more
times
so we have button one button one here we
have button two button two
button three
button three button four button four
five five
six
and of course we need to change the text
to 2
3
4
5 and 6.
and now we can place them in different
columns so we can say okay we want to
have button 2 also in the first row but
in the second column so we change this
to 1 this to 2 then we want to have 3
buttons and start the next row
so button 4 would be in row 1
but column 0 then
row 1
column one
row one
column two
and those are actually just two rows but
we can actually take a look at that now
so once we have the grid um i think we
only need to pack the frame so we're
going to say
button frame dot pack because remember
we have the pack layout in general but
inside of the button frame we have the
grid layout so the grid layout of the
application or actually the the layout
of the application is not the grid
layout it's the pack layout but inside
of the button frame we have the grid
layout uh but because of that we need to
say button frame dot pack and we're
going to say fill equals
x
actually as a string is enough
we can also pass tk.x i think but this
means that it's going to stretch into
the x dimension
and now you can see that we have the
result
that we want it a basic grid layout uh
where we can do that
now before we move on i also want to
show you the place function so instead
of using grid or
pack we can also use the place function
to place something manually for example
down here i can say another
button it's going to be tk.button and
it's going to be part of root and it's
going to have a text
test and now we're going to see another
button dot place and i can just say x
equals uh what's the geometry 500 times
500 let's just say 200
and 200
for y
and then i can say height equals
i don't know 100 and
width equals 100 as well
and by doing that i can just decide on
the position because pack is a layout we
have a certain structure grid is a
layout we have a certain structure we
can manipulate parameters place
basically means put it there and make it
that size so it's a very manual thing
and you can see that in this case it
looks quite
bad but this is how you can place
widgets
exactly where you want
all right so i think you understand now
basically how tk intel works we import
the module we create a root window we
add some widgets and then we choose a
layout for example grid or pack or we
use the place function to create our
graphical user interface now the next
step is to add some functionality so to
button clicks for example or to certain
events that happen we want to add some
functionality to the graphical user
interface so that it's more than just a
design and for this we're going to
define our graphical user interface
inside of a class because oftentimes
it's a little bit tricky with the order
in which you define a certain element so
if you have the graphical user interface
defined and then the functionality in
terms of functions so you have a
function that does something
this function maybe needs to know the
graphical user interface in order to
access certain elements then again the
graphical user interface needs to know
the function because the function is
what it's called what is called when we
do something
and this can get a little bit tricky in
a class in an object we have everything
structured so i can just say refer to
that ui element
via the self object or refer to that
function via the self object it's just a
best practice or better practice to do
it inside of a function so let's say
again import tk
import tk enter sdk
and then we're going to create a class
my gui like that
and in the constructor we're going to
have the whole graphical user interface
process so we're going to start with
self.root is going to be tk.tk
as before and then self.root.mainloop
so just calling the constructor is going
to create the graphical user interface
already
now so that we don't do just anything
here let's uh think about a very simple
application
we're going to have a simple label at
the top we're going to have a text box
where we can enter some text as a user
and then we're going to have a button
and when we click that button we're
going to get a message box
with the text that we typed in the text
box displayed onto the screen and in
addition so that we use a little bit
more ui elements we're also going to add
a checkbox if that checkbox is checked
we're going to get the pop-up if it's
not checked so if it's unchecked we're
going to get some console output so
we're going to get the message printed
onto the console if it's checked we're
going to get a pop-up
so let's start with the label we're
going to say self.label is going to be
tk.label again and it's going to be part
of self.root
and we're going to say the text is
your message for example
and the font is going to be
arial
[Music]
18 for example
self dot label dot pack
padding x equals 10 padding y equals 10
[Music]
then self dot text
box
going to be tk text box or tk text
self dot root
and font equals
ariel
16
self.textbox
dot pack
pad x 10
pad y 10 and of course don't forget the
height let's say the height is five for
something should be enough
and then we're going to add the checkbox
so the checkbox is going to be
self.check
it's going to be tk.check button
it's going to be part of self.root and
we're going to say the text is
show
a message
box
like that
and i don't think that we need much more
for that i mean of course yeah we need
uh to have
the font size again
ariel
and 18 or actually let's make the 16.
now
the check button in tk enter is a little
bit tricky because we cannot just into
intuitively go and say self.check dot uh
is checked or something and we get true
or false we need to add a variable to
that check button and this variable is
going to have the value of the check
button it's a little bit complicated uh
so let's first say self.jack.pack
uh
pack
pad x equals 10
pad y equals 10 as well
and uh before that we're going to create
now here's self dot
let's just call this
check
check state or something
and this is going to be tk dot
int
var in variable basically
and this in variable is going to have
this integer variable is going to have
the state of the checkbox and in order
to get that we need to say
variable
equals
self dot check state
like that
and last but not least let's add the
button
self dot button is going to be tk dot
button
self dot root
the text is going to be
show message
font is going to be ariel
18
self.button.pack
there you go now in order to add the
functionality first of all we're going
to define the function itself so we're
going to say def
and we're going to call the function
here
show message
like that
i'm going to pass for now and in order
to make this function being executed
when the button is clicked we're just
going to go to the end here and say
command equals and then self dot
show message now it's important that you
don't call the function so you don't
want to say show message and then
parentheses like that because we're not
calling show message we're passing show
message as a parameter and it's going to
be called whenever we click the button
so if we for example write something
like hello world here
and we create a my gui object here at
the bottom
and we run the script
we should be able that when i press
we should be able to see that when i
press show message we see hello world in
the console all right so it works
now all we need to do is we need to um
to show the message from the text box
here onto the screen via message box
depending on the check so the first
thing is want to know okay is the
checkbox checked or not now in order to
get the the state of this variable here
we need to now say
self.checkstate.get
like that this gets uh the state of the
checkbox so now if i run this you're
going to see that we're going to get a
number
if i click it you see 0 if i check and
then click it you see one so if the
check box is unchecked we're going to
have zero otherwise one
and this is what we can look at so we're
going to say if
self dot check state dot get
equals zero then we're just going to
what exactly are we going to print we're
going to print the content of the text
box so self dot text box and this is
again something that's a little bit
tricky because in
uh in tk intro we need to use the get
function and provide a start and an end
so index 1 index 2.
the index 1 is a string which is 1.0 if
you want to start in the beginning
and if you want to stop uh in the end so
if you want to go all the way to the end
you have to pass tk.end
now this is a little bit unusual because
in other frameworks you would just say
box dot get value or get text or dot
text here you need to say dot get and
you need to pass that as a beginning and
this is an end if you want to get
everything
and
otherwise if we don't get that we're
going to
we're going to print a message box and
for that we need to make an import we
need to say
from tk inter import
message box like that
and now we're just going to say
message box dot
show info
and the content first of all the title
is going to be
message and the message itself
is going to be self.textbox
dot get again 1.0
tk.end which basically means
go all the way
through so this should already work
if i type something
there we go
and if i uncheck this we see it in the
command line instead of in a message box
so this works fine
uh what else did we want to do here now
one thing that i would like to add here
because this is something that a lot of
people are asking when i do gui
tutorials is how can i do something
like when i'm in the text box i don't
want to click the button i want to say
enter for example and based on that
click based on that keyboard press i
want the same thing to happen now in
this case enter would be a stupid choice
because enter is something that we can
use inside of the text box to change the
text but maybe we want to have something
like control enter
and control enter basically
triggers
that this function is executed as well
how can we do that
it's again a little bit tricky in tk
enter it's not the most straightforward
thing but what we do here is we go to
the text box and we say self dot text
box and then we can bind something here
we can bind
a certain type of event to a function
for example we combined
key press
in angle brackets this has to be that
exact string
this thing has to be bound to self dot
and now we can define another function
for example
let's call it shortcut
and
we can pass an event here
we have to pass an event here because
the event is going to be passed by the
bind function so we bind the keypress
event to self.shortcut
and this automatically passes an event
and from that event object we can now uh
look at what's happening now one thing
that i want to show you is that this
event object has certain parameters now
if i run this i'm not sure if we're
going to see that
so if i'm now in the message box here
you can see that whenever i press
something we get a key press event down
here
and this keypress event has an event a
state here and a key symbol
so what we're interested in is
we want to have enter and we want to
have control now if i run this here and
i just press enter you can see the key
symbol is return
now if i press control you can see the
key symbol is control but if i hold ctrl
and i press enter
you can see that the key symbol was
returned
but the state was control mod 1. so if i
run this again and i don't press control
i just press enter you can see that the
state was mod 1 if i now press control
and enter you can see control is part of
the state so all we need to do here in
order to get the key combination is we
need to uh print event dot key symbol
and we need to
print event dot state
and this is going to tell us what we
need to look for because if i now press
enter we get return and the state is
eight if i press ctrl enter
the state is
12 and return is
uh
return is the button
so all i need to do here is i need to
say if
event
dot
state equals 12
and
event
dot key symbol equals return then do
something for example let's print hello
for now
to see if that works in the first place
so now if i press something else nothing
happens but if i press ctrl enter we get
hello so this works now instead of
printing hello
we're just going to call show message
so self.showmessage
and now you're going to see that if i
have something in here and i now press
ctrl enter
oh of course we need to trigger that
checkbox otherwise we're not going to
get the message box but you can see that
this trigger is the same thing as the
button
so this works like that um
now one thing that i would like to also
show you is that sometimes i mean in
this case probably not but sometimes you
want to have some uh closing dialogue so
when you press the close button you
don't want the application to just be
closed but maybe you want to ask the
user do you really want to leave or do
you want to save something we're not
going to talk about safe dialogues and
open dialogues and all that
i think in the editor video in the
notepad clone
you're going to find that dialog but
besides that or actually that was pi qt
but i think in a paint clone you're
going to find safe and
open file dialogs today we're going to
only talk about the closing event so
what happens when i close the window how
can i react to that so let's say maybe i
just want to print hello world or
goodbye
whenever the user presses on the x
button
now in order to get the event what we
need to do is we need to say self
dot root dot protocol
and this is now a string which is called
wm underscore delete
underscore window and what we passed
here as a second parameter is the
function that we want to call whenever
this event happens so whenever we click
on the close button we're going to call
that function let's call it on closing
and of course we need to define it down
here so def on closing
and in here we're going to just say
hello world
and important we need to also destroy
the window because if we don't do that
all that's going to happen is that i'm
going to print hello world when i click
that it's no longer going to close so we
need to say
self
dot root dot destroy
so again
there you go
now instead of printing hello world
we're going to ask for
uh for the user to
confirm that the user wants to leave the
application so we're going to say
i need to look up the syntax again here
if
messagebox
dot and now we can choose a dialog from
here we have something like
ask question ask retry cancel ask yes no
cancel
or ask yes no this is what we're going
to use here
uh ask yes no there you go and we're
going to pass the title
quit question mark message
equals
do you really want to quit question mark
now if the answer to that is yes we're
going to have a positive value here so
this if statement is only going to be
triggered if we uh if we pass if we
press yes and otherwise we're going to
do nothing
so if i press on x now do you really
want to quit no nothing happens do you
really want to quit yes
destroyed
now last but not least for this video in
order to just show you a little bit more
ui elements we're going to also add a
menu to the top so something like here
in pycharm with file edit view and all
that we're going to keep it minimal but
i'm going to show you how you can just
create a simple menu bar and inside of
that menu bar you want to have different
menus for example file and action or
help or something
and then we can also add functionalities
to the individual presses inside of that
menu bar so what we're going to do is
we're going to say self dot
menu bar which is going to be the main
thing it's just going to be tk dot menu
and it's going to be part of self dot
root
then we're going to also create self dot
file menu
and this is going to be tk menu as well
so one menu is going to be part of the
other menu
and this is going to be part of self dot
menu bar
and we're going to also pass the
parameter
uh tear off or tear off tierra right
is going to be zero so that we have
otherwise we're going to have a dashed
line at the top and we don't want that
and inside of that file menu we're now
going to add some uh
things that we can do so for example we
can say self dot file menu dot add
command
and we're going to have a simple command
with a label
close
and this label close is going to have
the command exit we're going to refer to
the basic python exit function and
that's all it's going to do
now if i want to add this now to the
final to the to the menu bar what i do
is i say self dot menu bar
dot add cascade
and the menu i'm adding is self dot file
menu
and the label of that menu is going to
be file
and then last but not least i think i
need to also add the menu bar to the
root and we do that by saying
self.root.config
and we set the menu of the root to be
self dot menu bar
so now if we run this you can see we
have file up here and i can click on
close and closes the window
now actually we can also link this to
not exit but to self dot on closing
i think that it has the same effect as
clicking this button so
no
or
yes there you go so this also works now
we can also add multiple commands i'm
going to add the same command
again so we can say close with error or
close
without
question just so we have a second item
here
we're going to pass exit here and
between those we're going to have a
separator so we can also say file menu
dot at separator
and this may be useful if you have a lot
of different options of different
categories you can have this separator
line between these two buttons here
or between these two commands now let's
just um so that we see that this also
works let's just add another menu so
action menu for example is going to be
tk menu
part of self dot menu bar
tear off
zero um not sure how it's pronounced
tear off tear off i think tear off makes
more sense right
let me know in the comment section down
below
so action menu dot add command
on we can just say i don't know label is
going to be show
message
and the command is going to be
self dot show message like that
then again
self dot menu bar actually let's do it
down here
add cascade
self dot action menu
and label is going to be action
there you go so now we have action so uh
show message
like that if we have the message box
checked
this is going to work as well
one final thing i want to show you is if
you want to for some reason clear the
text box let's create a second button
self dot clear button
and this button shall delete the content
of the box
so let me just write it real quick text
equals clear
font equals ariel 16 no 18 actually
the command is going to be
self dot clear and we're going to define
it
self dot clear button dot
pack with padding
and uh if we want to do that we need to
do something similar to the getting here
so we need to also specify these indices
so what we're going to do is we're going
to say def clear
and we're going to say self dot
text box dot delete
and here we pass 1.0 and tk.end as far
as i know this is how it's done so
there you go if i write something and
click on clear this clears
the message box
all right so that's it for today's video
i hope i was able to give you a good
introduction to tk inter if you liked
that video let me know in the comment
section down below and click the like
button and of course don't forget to
subscribe and hit the notification bell
to not miss a single future video for
free other than that thank you very much
for watching see you next video and bye
[Music]
you
5.0 / 5 (0 votes)