AD

Python Tkinter से बनाएं GUI Student Marks Calculator: बिगिनर्स के लिए स्टेप-बाय-स्टेप ट्यूटोरियल

Python Tkinter से बनाएं GUI Student Marks Calculator: बिगिनर्स के लिए स्टेप-बाय-स्टेप ट्यूटोरियल

जब आप कोडिंग सीखना शुरू करते हैं, तो शुरुआती दिनों में ब्लैक एंड व्हाइट टर्मिनल या कमांड प्रॉम्प्ट पर प्रोग्राम चलाना थोड़ा नीरस लग सकता है। हर स्टूडेंट की यह ख्वाहिश होती है कि वह एक ऐसा सॉफ्टवेयर या ऐप बनाए जिसमें दिखने वाले बटन हों, टेक्स्ट बॉक्स हों और माउस क्लिक से काम करने वाला एक सुंदर इंटरफेस हो। इसे ही हम GUI (Graphical User Interface) कहते हैं।

यदि आप Python सीख रहे हैं और अपने प्रोजेक्ट पोर्टफोलियो के लिए पहली रियल-वर्ल्ड डेस्कटॉप एप्लीकेशन बनाना चाहते हैं, तो यह ट्यूटोरियल आपके लिए ही है। इस आर्टिकल में हम Python की प्रसिद्ध Tkinter लाइब्रेरी का इस्तेमाल करके एक व्यावहारिक Student Marks & Percentage Calculator बनाएंगे।

प्रोजेक्ट ओवरव्यू: हम क्या बनाने वाले हैं?

इस प्रोजेक्ट में हम एक डेस्कटॉप GUI एप्लीकेशन तैयार करेंगे जो निम्नलिखित काम करेगी:

  • छात्र का नाम और तीन विषयों (गणित, विज्ञान, अंग्रेजी) के अंक इनपुट लेगी।
  • एक 'Calculate Result' बटन प्रदान करेगी।
  • बटन पर क्लिक करते ही कुल अंक (Total Marks) और प्रतिशत (Percentage) की गणना करेगी।
  • प्रतिशत के आधार पर ग्रेड (First Division, Second Division, या Fail) प्रदर्शित करेगी।
  • गलत इनपुट (जैसे टेक्स्ट की जगह अक्षर टाइप करना) को संभालने के लिए बेसिक डेटा वैलिडेट करेगी।

Tkinter क्या है और यह बिगिनर्स के लिए क्यों बेस्ट है?

Tkinter, Python के साथ आने वाली एक इन-बिल्ट (In-built) GUI लाइब्रेरी है। इसका सबसे बड़ा फायदा यह है कि आपको इसे अलग से इंस्टॉल करने की आवश्यकता नहीं होती। यह हल्की है, सीखने में बेहद आसान है और विंडोज, मैक और लिनक्स तीनों पर आसानी से काम करती है।

स्टेप 1: मुख्य विंडो (Main Window) बनाना

किसी भी GUI ऐप को बनाने का पहला कदम एक विंडो बनाना होता है। इसके लिए अपनी पसंदीदा कोड एडिटर (जैसे VS Code या PyCharm) में calculator.py नाम से एक फाइल बनाएं और नीचे दिया गया बेसिक ढांचा लिखें:

import tkinter as tk
from tkinter import messagebox

# मुख्य विंडो बनाएं
app = tk.Tk()
app.title("Student Grade Calculator")
app.geometry("400x450")
app.configure(bg="#f0f4f8")

# ऐप को चालू रखने के लिए मुख्य लूप
app.mainloop()

कोड की समझ: tk.Tk() से मुख्य विंडो बनती है, geometry() से विंडो की चौड़ाई और लंबाई तय होती है, और mainloop() विंडो को तब तक स्क्रीन पर रोक कर रखता है जब तक यूजर उसे बंद न करे।

स्टेप 2: इनपुट फ़ील्ड्स और लेबल्स (UI Design) जोड़ना

अब हमें यूजर से डेटा लेने के लिए लेबल्स (Label) और इनपुट बॉक्स (Entry) जोड़ने होंगे। Tkinter में विजेट्स को स्क्रीन पर व्यवस्थित करने के लिए grid() या pack() लेआउट का उपयोग किया जाता है। हम यहाँ ग्रिड लेआउट का उपयोग करेंगे।

विंडो के अंदर शीर्षक और इनपुट बॉक्स जोड़ने के लिए मुख्य लूप से पहले यह कोड लिखें:

# हेडिंग
header = tk.Label(app, text="Student Marks Calculator", font=("Arial", 16, "bold"), bg="#f0f4f8", fg="#333")
header.pack(pady=15)

# इनपुट फ्रेम
frame = tk.Frame(app, bg="#f0f4f8")
frame.pack(pady=10)

# नाम इनपुट
tk.Label(frame, text="Student Name:", font=("Arial", 10), bg="#f0f4f8").grid(row=0, column=0, sticky="w", py=5)
entry_name = tk.Entry(frame, font=("Arial", 10))
entry_name.grid(row=0, column=1, py=5)

# विषय 1
tk.Label(frame, text="Maths Marks (out of 100):", font=("Arial", 10), bg="#f0f4f8").grid(row=1, column=0, sticky="w", py=5)
entry_math = tk.Entry(frame, font=("Arial", 10))
entry_math.grid(row=1, column=1, py=5)

# विषय 2
tk.Label(frame, text="Science Marks (out of 100):", font=("Arial", 10), bg="#f0f4f8").grid(row=2, column=0, sticky="w", py=5)
entry_sci = tk.Entry(frame, font=("Arial", 10))
entry_sci.grid(row=2, column=1, py=5)

# विषय 3
tk.Label(frame, text="English Marks (out of 100):", font=("Arial", 10), bg="#f0f4f8").grid(row=3, column=0, sticky="w", py=5)
entry_eng = tk.Entry(frame, font=("Arial", 10))
entry_eng.grid(row=3, column=1, py=5)

स्टेप 3: कैलकुलेशन के लिए Python Logic लिखना

अब हमें एक ऐसा फंक्शन बनाना है जो बटन दबाने पर इनपुट बॉक्स से वैल्यूज निकालेगा, गणितीय गणना करेगा और परिणाम तय करेगा।

def calculate_result():
    try:
        name = entry_name.get().strip()
        m1 = float(entry_math.get())
        m2 = float(entry_sci.get())
        m3 = float(entry_eng.get())
        
        if not name:
            messagebox.showwarning("Input Error", "कृपया छात्र का नाम दर्ज करें!")
            return
            
        if any(mark < 0 or mark > 100 for mark in [m1, m2, m3]):
            messagebox.showerror("Invalid Marks", "अंक 0 से 100 के बीच होने चाहिए!")
            return
            
        total = m1 + m2 + m3
        percentage = (total / 300) * 100
        
        # ग्रेड तय करना
        if percentage >= 60:
            grade = "First Division"
        elif percentage >= 45:
            grade = "Second Division"
        elif percentage >= 33:
            grade = "Third Division"
        else:
            grade = "Fail"
            
        # रिजल्ट प्रदर्शित करना
        result_text = f"नाम: {name}\nकुल अंक: {total}/300\nप्रतिशत: {percentage:.2f}%\nपरिणाम: {grade}"
        label_result.config(text=result_text, fg="#006622" if grade != "Fail" else "#cc0000")
        
    except ValueError:
        messagebox.showerror("Type Error", "कृपया अंकों के स्थान पर केवल संख्याएं दर्ज करें!")

स्टेप 4: बटन और आउटपुट डिस्प्ले जोड़ना

अंत में, हमें इस फंक्शन को ट्रिगर करने के लिए एक बटन और परिणाम दिखाने के लिए एक लेबल की आवश्यकता है।

# कैलकुलेट बटन
btn_calc = tk.Button(app, text="Calculate Result", command=calculate_result, bg="#007bff", fg="white", font=("Arial", 11, "bold"), px=10, py=5)
btn_calc.pack(pady=15)

# परिणाम दिखाने के लिए स्थान
label_result = tk.Label(app, text="", font=("Arial", 11, "bold"), bg="#f0f4f8", justify="left")
label_result.pack(pady=10)

पूरा कोड एक साथ (Complete Source Code)

नीचे इस प्रोजेक्ट का पूरा सोर्स कोड दिया गया है जिसे आप सीधे कॉपी करके चला सकते हैं:

import tkinter as tk
from tkinter import messagebox

def calculate_result():
    try:
        name = entry_name.get().strip()
        m1 = float(entry_math.get())
        m2 = float(entry_sci.get())
        m3 = float(entry_eng.get())
        
        if not name:
            messagebox.showwarning("Input Error", "कृपया छात्र का नाम दर्ज करें!")
            return
            
        if any(mark < 0 or mark > 100 for mark in [m1, m2, m3]):
            messagebox.showerror("Invalid Marks", "अंक 0 से 100 के बीच होने चाहिए!")
            return
            
        total = m1 + m2 + m3
        percentage = (total / 300) * 100
        
        if percentage >= 60:
            grade = "First Division"
        elif percentage >= 45:
            grade = "Second Division"
        elif percentage >= 33:
            grade = "Third Division"
        else:
            grade = "Fail"
            
        result_text = f"नाम: {name}\nकुल अंक: {total:.0f}/300\nप्रतिशत: {percentage:.2f}%\nग्रेड: {grade}"
        label_result.config(text=result_text, fg="#006622" if grade != "Fail" else "#cc0000")
        
    except ValueError:
        messagebox.showerror("Type Error", "कृपया केवल मान्य अंक (Numbers) दर्ज करें!")

# GUI मुख्य विंडो
app = tk.Tk()
app.title("Student Grade Calculator")
app.geometry("400x480")
app.configure(bg="#f0f4f8")

header = tk.Label(app, text="Student Marks Calculator", font=("Arial", 16, "bold"), bg="#f0f4f8", fg="#333")
header.pack(pady=15)

frame = tk.Frame(app, bg="#f0f4f8")
frame.pack(pady=10)

tk.Label(frame, text="Student Name:", font=("Arial", 10), bg="#f0f4f8").grid(row=0, column=0, sticky="w", py=5)
entry_name = tk.Entry(frame, font=("Arial", 10))
entry_name.grid(row=0, column=1, py=5)

tk.Label(frame, text="Maths Marks:", font=("Arial", 10), bg="#f0f4f8").grid(row=1, column=0, sticky="w", py=5)
entry_math = tk.Entry(frame, font=("Arial", 10))
entry_math.grid(row=1, column=1, py=5)

tk.Label(frame, text="Science Marks:", font=("Arial", 10), bg="#f0f4f8").grid(row=2, column=0, sticky="w", py=5)
entry_sci = tk.Entry(frame, font=("Arial", 10))
entry_sci.grid(row=2, column=1, py=5)

tk.Label(frame, text="English Marks:", font=("Arial", 10), bg="#f0f4f8").grid(row=3, column=0, sticky="w", py=5)
entry_eng = tk.Entry(frame, font=("Arial", 10))
entry_eng.grid(row=3, column=1, py=5)

btn_calc = tk.Button(app, text="Calculate Result", command=calculate_result, bg="#007bff", fg="white", font=("Arial", 11, "bold"))
btn_calc.pack(pady=15)

label_result = tk.Label(app, text="", font=("Arial", 11, "bold"), bg="#f0f4f8", justify="left")
label_result.pack(pady=10)

app.mainloop()

नये कोडिंग सीख रहे स्टूडेंट्स के लिए 3 जरूरी सुझाव

1. Data Type Conversion को न भूलें

Tkinter के Entry विजेट से मिलने वाला डेटा हमेशा String फॉर्मेट में होता है। यदि आप बिना float() या int() में बदले गणितीय गणना करेंगे तो एरर आएगा या स्ट्रिंग आपस में जुड़ (concatenate) जाएगी।

2. Exception Handling (try-except) का इस्तेमाल करें

यूजर गलती से टेक्स्ट बॉक्स खाली छोड़ सकता है या नंबर की जगह लेटर लिख सकता है। ऐसे में ऐप क्रैश न हो, इसके लिए try-except ब्लॉक का इस्तेमाल करना बेहद जरूरी है।

3. GUI Layout Managers को समझें

एक ही विजेट पर pack() और grid() दोनों का इस्तेमाल एक साथ न करें, वरना Tkinter कंफ्यूज हो जाएगा और प्रोग्राम फ्रीज हो सकता है।

इस प्रोजेक्ट को आगे कैसे बेहतर बनाएं? (Next Step Challenge)

यदि आपने यह ऐप सफलतापूर्वक बना लिया है, तो प्रैक्टिस के लिए इसमें ये फीचर्स जोड़ने की कोशिश करें:

  • एक 'Reset' बटन जोड़ें जो सारे इनपुट बॉक्स और लेबल क्लियर कर दे।
  • डेटा को .csv या .txt फाइल में सेव करने का ऑप्शन जोड़ें।
  • प्रतिSubject पासिंग मार्क्स (जैसे न्यूनतम 33) की शर्त भी लॉजिक में जोड़ें।

Frequently Asked Questions (FAQs)

Q1: क्या Python Tkinter का उपयोग करने के लिए pip install की आवश्यकता है?

नहीं, Tkinter पाइथन का मानक पैकेज है। यह Windows और macOS पर पाइथन के साथ पहले से इंस्टॉल आता है। लिनक्स यूज़र्स को python3-tk कमांड से इसे इंस्टॉल करना पड़ सकता है।

Q2: क्या हम इस ऐप का EXE (.exe) रूप बनाकर दोस्तों को दे सकते हैं?

हाँ! आप pyinstaller लाइब्रेरी का इस्तेमाल करके अपने इस .py कोड को Windows .exe फाइल में बदल सकते हैं, जिससे यह बिना Python के भी किसी के कंप्यूटर पर चलेगा।

Q3: Desktop Apps बनाने के लिए Tkinter के अलावा और कौन से विकल्प हैं?

पाइथन में एडवांस GUI के लिए PyQt5 / PySide6 और CustomTkinter बहुत लोकप्रिय विकल्प हैं, जो आधुनिक (Modern Dark Mode) इंटरफेस बनाने की सुविधा देते हैं।

Post a Comment

0 Comments