টিসিএল (Tcl) - Widgets এর সাথে Events Binding করা
Tk (Tcl/Tk) এর সাথে Event Binding একটি শক্তিশালী টেকনিক যা আপনাকে উইজেটের সাথে ব্যবহারকারীর ইন্টারঅ্যাকশনগুলো সংযুক্ত করতে এবং সেগুলির প্রতি প্রতিক্রিয়া তৈরি করতে সহায়তা করে। Event Binding এর মাধ্যমে আপনি মাউস ক্লিক, কীবোর্ড ইনপুট, উইন্ডো ফোকাস, মাউস মুভমেন্ট ইত্যাদির মতো বিভিন্ন ইভেন্ট ট্র্যাক করতে পারেন এবং এর ভিত্তিতে অ্যাপ্লিকেশনের আচরণ নিয়ন্ত্রণ করতে পারেন।
এখানে Widgets এর সাথে Events Binding করার বিস্তারিত আলোচনা করা হয়েছে।
১. Event Binding (ইভেন্ট বাইন্ডিং) এর মূল ধারণা
Event Binding হল একটি পদ্ধতি যেখানে আপনি কোনো উইজেটের সাথে ইভেন্ট সংযুক্ত করেন। যখন ওই ইভেন্টটি ঘটে, তখন নির্দিষ্ট একটি callback function বা handler চলে, যা আপনার নির্দিষ্ট কার্যকলাপ সম্পাদন করবে।
সিনট্যাক্স:
bind widget event handlerwidget: যেই উইজেটের সাথে ইভেন্টটি বাইন্ড করতে চানevent: ইভেন্টের ধরন (যেমন মাউস ক্লিক, কী প্রেস ইত্যাদি)handler: ইভেন্টের জন্য নির্ধারিত ফাংশন বা কমান্ড
২. ইভেন্টের ধরন
টিসিএল-এ বিভিন্ন ধরনের ইভেন্ট পাওয়া যায়, যেমন:
<Button-1>: লেফট মাউস বাটন ক্লিক<Button-2>: স্ক্রোল বাটন ক্লিক<Button-3>: রাইট মাউস বাটন ক্লিক<KeyPress>: কীবোর্ডে কী প্রেস করা<Enter>: মাউস উইন্ডোর মধ্যে প্রবেশ<Leave>: মাউস উইন্ডোর বাইরে চলে যাওয়া<Motion>: মাউস মুভমেন্ট<Configure>: উইন্ডোর আকার পরিবর্তন
৩. ইভেন্ট বাইন্ডিং উদাহরণ
৩.১. মাউস ক্লিক ইভেন্ট বাইন্ডিং
ধরা যাক, একটি বাটনে ক্লিক করলে একটি বার্তা প্রিন্ট করতে চান।
package require Tk
# উইন্ডো তৈরি
set win [tk::toplevel .]
# বাটন তৈরি
button $win.b1 -text "Click Me"
# মাউস বাটন ক্লিক ইভেন্ট বাইন্ড করা
bind $win.b1 <Button-1> {puts "Button clicked!"}
# উইন্ডো প্রদর্শন
pack $win.b1
tk::mainloopএখানে, <Button-1> ইভেন্ট (লেফট মাউস বাটন ক্লিক) bind কমান্ডের মাধ্যমে বাটন $win.b1 এর সাথে বাইন্ড করা হয়েছে। যখন বাটনে ক্লিক করা হবে, "Button clicked!" মেসেজটি কনসোলে প্রিন্ট হবে।
৩.২. কীবোর্ড ইনপুট ইভেন্ট বাইন্ডিং
কীবোর্ডে কোনো কী প্রেস করলে তা ট্র্যাক করতে পারেন।
package require Tk
# উইন্ডো তৈরি
set win [tk::toplevel .]
# কীবোর্ড ইনপুট হ্যান্ডলার ফাংশন
proc handleKeyPress {key} {
puts "Key pressed: $key"
}
# কীবোর্ড ইনপুট ইভেন্ট বাইন্ড করা
bind $win <KeyPress> {handleKeyPress %K}
# উইন্ডো প্রদর্শন
tk::mainloopএখানে, <KeyPress> ইভেন্টটি bind কমান্ডের মাধ্যমে উইন্ডোর সাথে বাইন্ড করা হয়েছে। %K প্যারামিটারটি প্রেস করা কী-এর মান পাঠাবে।
৩.৩. মাউস মুভমেন্ট ইভেন্ট বাইন্ডিং
মাউস মুভমেন্ট ট্র্যাক করতে:
package require Tk
# উইন্ডো তৈরি
set win [tk::toplevel .]
# মাউস মুভমেন্ট হ্যান্ডলার ফাংশন
proc handleMouseMove {event} {
puts "Mouse moved to: $event"
}
# মাউস মুভমেন্ট ইভেন্ট বাইন্ড করা
bind $win <Motion> {handleMouseMove %x %y}
# উইন্ডো প্রদর্শন
tk::mainloopএখানে, <Motion> ইভেন্টটি উইন্ডোতে মাউস মুভমেন্ট ট্র্যাক করবে এবং %x এবং %y প্যারামিটারগুলি মাউসের x এবং y কোঅর্ডিনেট প্রদান করবে।
৪. কাস্টম ইভেন্ট হ্যান্ডলিং (Custom Event Handling)
আপনি যদি নিজের কাস্টম ইভেন্ট হ্যান্ডলার তৈরি করতে চান, তবে এটি bind কমান্ডের মাধ্যমে করা সম্ভব। এখানে একটি উদাহরণ দেওয়া হলো যেখানে একটি কাস্টম ইভেন্ট হ্যান্ডলিং তৈরি করা হয়েছে:
package require Tk
# উইন্ডো তৈরি
set win [tk::toplevel .]
# কাস্টম ইভেন্ট হ্যান্ডলারের ফাংশন
proc customEventHandler {} {
puts "Custom event triggered!"
}
# কাস্টম ইভেন্ট বাইন্ড করা
bind $win <Button-1> {event generate $win <CustomEvent>}
# কাস্টম ইভেন্ট হ্যান্ডলিং
bind $win <CustomEvent> {customEventHandler}
# উইন্ডো প্রদর্শন
pack $win
tk::mainloopএখানে, একটি কাস্টম ইভেন্ট <CustomEvent> তৈরি করা হয়েছে, যা Button-1 ক্লিক করলে ট্রিগার হয় এবং customEventHandler ফাংশনটি রান হয়।
৫. ইভেন্ট হ্যান্ডলিংয়ের জন্য bindtags ব্যবহার
Tk উইজেটগুলির ইভেন্ট হ্যান্ডলিং বিভিন্ন স্তরে বাইন্ড করা যেতে পারে। bindtags কমান্ড ব্যবহার করে আপনি একটি উইজেটের জন্য একাধিক ইভেন্ট হ্যান্ডলার সেট করতে পারেন এবং নির্দিষ্টভাবে কোনটি আগে চলবে তা নিয়ন্ত্রণ করতে পারেন।
উদাহরণ:
package require Tk
# উইন্ডো তৈরি
set win [tk::toplevel .]
# বাটন তৈরি
button $win.b1 -text "Click Me"
# ইভেন্ট বাইন্ডিং সেট করা
bind $win.b1 <Button-1> {puts "Button clicked!"}
bindtags $win.b1 {button win all}
# উইন্ডো প্রদর্শন
pack $win.b1
tk::mainloopএখানে, bindtags কমান্ডের মাধ্যমে $win.b1 বাটনের জন্য বাইন্ডিং সেট করা হয়েছে। এটি নির্ধারণ করবে যে কোন স্তরের ইভেন্ট প্রথমে ট্রিগার হবে।
উপসংহার
Event Binding Tk অ্যাপ্লিকেশনে ব্যবহারকারীর ইন্টারঅ্যাকশনের প্রতি প্রতিক্রিয়া জানাতে ব্যবহৃত হয়। bind কমান্ড ব্যবহার করে আপনি Tk উইজেটের সাথে বিভিন্ন ধরনের ইভেন্ট (যেমন মাউস ক্লিক, কী প্রেস, মাউস মুভমেন্ট ইত্যাদি) বাইন্ড করতে পারেন। Event Handlers ব্যবহার করে আপনি এই ইভেন্টগুলির জন্য কাস্টম ফাংশন তৈরি করতে পারেন এবং অ্যাপ্লিকেশনের কার্যকারিতা পরিচালনা করতে পারেন। Tk-এ bindtags ব্যবহার করে আপনি ইভেন্ট হ্যান্ডলিং কাস্টমাইজ করতে এবং নির্দিষ্ট অর্ডারে ইভেন্ট পরিচালনা করতে পারেন।
Read more