পাইথনে টিকিনটার গুই প্রোগ্রামিং করার সময় ক্লাস কেন ব্যবহার করবেন


19

আমি মূলত অজগরে প্রোগ্রাম করি এবং টিকিটারের সাথে জিইআই'র কয়েকটি প্রোগ্রাম করেছি, আমি যে প্রতি টিউটোরিয়ালটি দেখেছি সে জিইউআইয়ের জন্য কোনও ক্লাস সংজ্ঞায়িত এবং ব্যবহার করার পরামর্শ দিয়েছে, তবে আমার জিইউআই কোনও ক্লাস ছাড়াই কেবল প্রক্রিয়াগুলি নির্বিঘ্নে চালায়।

কেন একটি ক্লাস ব্যবহার? আমার দৃষ্টিকোণ থেকে মনে হয় কেবল জটিলতা এবং অপ্রয়োজনীয় কোডের একটি অতিরিক্ত স্তর হতে পারে।

উত্তর:


19

কেন একটি ক্লাস ব্যবহার? কারণ এটি কাজটি আরও সহজ করে তোলে, ধরে নেওয়া এবং আপনি কীভাবে অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং করবেন জানেন এবং ধরে নিচ্ছেন যে আপনি একটি অ-তুচ্ছ জিওআই লিখছেন। অবজেক্ট ব্যবহার করা আপনাকে সহজেই নিজের কোডটিকে মডিউলার ইউনিটগুলিতে ভাগ করতে দেয় যা স্বতঃ অন্তর্ভুক্ত থাকে এবং আপনার কোডকে মডুলারাইজ করা সাধারণত একটি সেরা অনুশীলন হিসাবে বিবেচনা করা হয়।

জিইউআই প্রোগ্রামিং সহজেই নিজেকে একটি অবজেক্ট ওরিয়েন্টড স্টাইলে leণ দেয়, যেহেতু একটি জিইউআই পুরোপুরি অবজেক্টস - লেবেল, বোতাম, স্ক্রোলবার, পাঠ্য অঞ্চল ইত্যাদি দিয়ে তৈরি হয় আপনি যেহেতু ইতিমধ্যে অবজেক্ট ব্যবহার করছেন তাই আপনার কোডটিকে বৃহত্তর অবজেক্টগুলিতে সংগঠিত করা অর্থপূর্ণ হয়ে ওঠে । সরঞ্জামদণ্ডটি একটি অবজেক্ট, স্ট্যাটাসবারটি একটি অবজেক্ট, নেভিগেশন ফলক একটি বস্তু, প্রধান ক্ষেত্রটি একটি বস্তু, প্রতিটি নোটবুক ট্যাব একটি অবজেক্ট এবং আরও অনেক কিছু।

এমনকি আপনার কোডটি খুব জটিল না হলেও, আরও ব্যবহারিক দৃষ্টিকোণ থেকে এটি আপনাকে আগে যে ফাইলটি কল করছেন তার সংজ্ঞার চেয়ে ফাইলটিতে বাইন্ডিং এবং কলব্যাকগুলি সংজ্ঞায়িত করতে দেয় যা আমি মনে করি যে এটি প্রচুর অর্থবোধ করে।

উদাহরণস্বরূপ, একটি সরল উদাহরণ বিবেচনা করুন (ধরে নিবেন যে টিনকিটারটি import tkinter as tk(পাইথন 3) বা import Tkinter as tk(পাইথন 2) এর মতো আমদানি করা হয়েছে :

def quit(event=None):
    sys.exit()
root = tk.Tk()
label = tk.Label(root, text="Hello, world")
label.pack()
label.bind("<1>", quit)
root.mainloop()

আমার কাছে, সেই কোডটির প্রবাহ সমস্ত ভুল। উল্লেখ করার আগে আমাকে প্রস্থান পদ্ধতিটি নির্ধারণ করতে হবে এবং মূল উইন্ডো তৈরি এবং মেনলুপে কলটি অন্যান্য কোডের দ্বারা পৃথক করা হয়েছে।

ক্লাস ব্যবহার করে, আমি কোডটি আরও প্রাকৃতিক ক্রমে লিখতে পারি:

class MyWindow(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Hello, world")
        label.pack()
        label.bind("<1>", self.quit)
    def quit(self, event=None):
        sys.exit()

root = tk.Tk()
MyWindow(root).pack()
root.mainloop()

জিইউআইয়ের মূল সংস্থাটি ফাইলের শীর্ষে রয়েছে এবং সমর্থনকারী কোডটি এর নীচে রয়েছে। এখন, অবশ্যই আপনি একই জিনিসটি বেশিরভাগ ক্ষেত্রে অর্জন করতে ফাংশন ব্যবহার করতে পারেন। আমার মতে, যদিও, ক্লাসগুলি এগুলিকে কিছুটা সহজ করে তোলে।

আরেকটি সুবিধা হ'ল আমি এখন "মূল" উইন্ডো (এবং ভিসার বিপরীতে) সম্পর্কে কোনও পরিবর্তন না করে সহজেই উইন্ডোটি সহজেই পরিবর্তন করতে পারি। এটি হ'ল আমি সীমান্তগুলি বা মূল জিইউআইতে একটি সম্পূর্ণ নতুন বিভাগ যুক্ত করতে পারি, তবে আমার মাই উইন্ডোর অভ্যন্তরে কোডের একটি লাইন স্পর্শ করতে হবে না। প্রসেসরাল কোডের সাথে এটির বৈসাদৃশ্য করুন যেখানে আপনাকে label.pack()বিবৃতি এবং ইউআই-তে থাকা অন্যান্য উইজেটের সমস্ত প্যাক (বা গ্রিড) বিবৃতি পরিবর্তন করতে হতে পারে ।

যাইহোক, যা বলা হচ্ছে তা ভাল, পরিষ্কার, রক্ষণাবেক্ষণযোগ্য কোড লেখার জন্য কোনও অবজেক্ট অরিয়েন্টেড পদ্ধতির ব্যবহারের প্রয়োজন নয়। এটি হতে পারে, তবে এটিও খারাপ কোডের দিকে নিয়ে যেতে পারে। দিনের শেষে কোনও অবজেক্ট-ভিত্তিক দৃষ্টিভঙ্গি কেবল একটি সরঞ্জাম। আপনি এটি ব্যবহার করেন বা না করেন এবং আপনি এটি সঠিকভাবে ব্যবহার করছেন কিনা তা অনেকগুলি কারণের উপর নির্ভর করে। সুতরাং এটি খুব ভাল হতে পারে যে আপনার জন্য এবং কোড আপনি লিখুন, একটি কার্মিক শৈলী পুরোপুরি গ্রহণযোগ্য। আমি মনে করি আপনি দেখতে পাচ্ছেন যে আপনার প্রোগ্রামগুলি আরও জটিল হওয়ার সাথে সাথে কোনও বস্তু-ভিত্তিক দৃষ্টিভঙ্গি আপনার কোডটি সংগঠিত এবং বজায় রাখা সহজ করবে।


দ্বিতীয় উদাহরণে আপনি কেন একটি ফ্রেম ব্যবহার করলেন? আপনি যেমন প্রথম উদাহরণে করেছিলেন তেমন এড়াতে পারবেন না? ক্লাস সহ ফ্রেম ব্যবহার করার পিছনে কি কোনও গোপন কথা রয়েছে?
মাল্টিগডোভার্স

2
ফ্রেমটি কেবল সুবিধার জন্য। ফ্রেমের কাছ থেকে উত্তরাধিকার সূত্রে কোনও গোপনীয়তা নেই। আমি objectবা অন্য কোনও শ্রেণীর কাছ থেকে উত্তরাধিকার সূত্রে পেতে পারি, তবে আমি সাধারণত কোনওভাবে ফ্রেম তৈরি করে শেষ করি। আমি যদি সবকিছু একটি ফ্রেমে রাখি তবে ক্লাসটিকে একটি ফ্রেম বানাতে বোধ হয়। ।
ব্রায়ান ওকলে

1
জ্ঞান তোলে, ধন্যবাদ! এছাড়াও, আমি অন্যদের ভেরিয়েবলগুলির আগে স্ব ব্যবহার করতে দেখেছি তবে আমি দেখতে পাচ্ছি যে আপনি এর label=tk.Label()পরিবর্তে কিছু ব্যবহার করছেন self.tk.Label()। এটা কি স্টাইলের পছন্দ? এখানে স্ব: পাইথন
টেক্সটবক.ড্রেডহেডসকস.আর.এন

1
@ ব্রায়ানওকলে, আমি অনুমান করি আপনি মাইওয়াইন্ডোর নিম্নলিখিত লাইনে মূলের পরিবর্তে পিতামাতাকে বোঝাতে চেয়েছিলেন __ init__: "লেবেল = tk.Label (মূল, পাঠ্য =" হ্যালো, বিশ্ব ")"
ব্যবহারকারী 3885927

1
@ ব্যবহারকারী 3885927: হ্যাঁ! বাহ, কারও নজরে আসতে প্রায় তিন বছর সময় লেগেছিল। যদিও না parentবরং বরং selfক্লাসটি নিজেই একটি ফ্রেম। ধন্যবাদ!
ব্রায়ান ওকলে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.