Python میں Tkinter کے ساتھ کیلکولیٹر کیسے بنایا جائے۔

اس ٹیوٹوریل میں، آپ سیکھیں گے کہ کیسے Tkinter کا استعمال کرتے ہوئے Python میں ایک سادہ ریاضی کا کیلکولیٹر بنانا ہے۔ یہ پروجیکٹ Python میں حقیقی GUI بنانے کی طرف پہلا قدم ہوگا۔

یہ آپ کے ابتدائی GUI پروجیکٹ کو ترتیب دینے میں مدد کے لیے ایک ہینڈ آن ٹیوٹوریل ہے۔ ہر اس شخص کے لیے جو ازگر میں بصری پروجیکٹس بنانا شروع کرنا چاہتا ہے۔

Tkinter لائبریری ایک معیاری بلٹ ان Python لائبریری ہے جو Python میں گرافیکل یوزر انٹرفیس بنانے میں مدد کرتی ہے۔ یہ ایک بلٹ ان لائبریری ہے، اس لیے اسے الگ سے انسٹال کرنے کی ضرورت نہیں ہے۔ لہذا، ایک بار جب آپ نے اپنے کمپیوٹر پر Python انسٹال کر لیا ہے، آپ کو بس اسے سیٹ اپ کرنے کی ضرورت ہے اور آپ یہاں اس کی پیروی کر سکتے ہیں۔

تاہم، ذہن میں رکھیں کہ آپ کے ڈسٹری بیوٹر پر Python کے ساتھ Tkinter انسٹال نہیں ہو سکتا۔ یہ چیک کرنے کے لیے کہ آیا یہ انسٹال ہے، کمانڈ پرامپٹ کھولیں اور ٹائپ کریں:

python -m tkinter

اگر Tkinter انسٹال ہے اور آپ کے کمپیوٹر پر کام کر رہا ہے، تو Tkinter نمونے کی ونڈو کھل جائے گی۔

انڈیکس

شرائط

اس سے پہلے کہ آپ شروع کریں، اس ٹیوٹوریل سے زیادہ سے زیادہ فائدہ اٹھانے میں آپ کی مدد کے لیے یہاں کچھ شرائط ہیں:

اب جب کہ آپ جانتے ہیں کہ اس ٹیوٹوریل میں کیا کرنا ہے، آئیے اس عمل پر ایک نظر ڈالتے ہیں۔

کسی بھی پروجیکٹ کی تعمیر کا پہلا قدم یہ ہے کہ آپ کیا بنانا چاہتے ہیں اس کے بارے میں واضح خیال پیدا کریں۔ آئیے دیکھتے ہیں کہ ہم کیا بنانے جا رہے ہیں۔

آپ ہمارے پروجیکٹ میں کیا دیکھنا چاہیں گے؟

آئیے ایک سادہ ریاضی کا کیلکولیٹر بنائیں۔ کیلکولیٹر اس طرح کام کرتا ہے:

  • کی بورڈ میں تمام نمبر ہوتے ہیں (0، 1، 2، ….، 9)۔

  • کی بورڈ میں بنیادی ریاضی (+, -, /, *, =) آپریٹرز ہوتے ہیں۔

  • کیلکولیٹر کا سائز تبدیل نہیں کیا جا سکتا۔ اس کا مطلب ہے کہ صارفین ایپلی کیشن ونڈو کی چوڑائی یا اونچائی کو نہیں بڑھا سکتے۔

  • کیلکولیٹر کی بورڈ کے اوپر ایک اسکرین ہے جو صارف کے ان پٹ اور حتمی جواب کو دکھاتی ہے۔

  • آخر میں، کیلکولیٹر میں ایک ‘AC’ بٹن ہے، جس کا مطلب ‘آل کلیئر’ ہے، جو ونڈو کی آؤٹ پٹ اسکرین پر موجود ہر چیز کو صاف کرتا ہے اور اسے دوبارہ صارف کے لیے دستیاب کرتا ہے۔

اس سے ہمیں واضح اندازہ ہو گیا کہ ہم کیا بنانے جا رہے ہیں۔

آپ پہلے سے UI بھی بنا سکتے ہیں اور اسی کے مطابق ونڈو میں ویجٹ رکھ سکتے ہیں۔ ذیل میں UI امیج ہے جسے ہم اس ٹیوٹوریل میں بنائیں گے۔

ونڈو کو کیسے ترتیب دیا جائے۔

مرکزی ونڈو کو ترتیب دینے کے لیے جس میں ہم بعد میں وجیٹس شامل کریں گے، ہمیں پہلے اپنے پروگرام میں Tkinter لائبریری کو درآمد کرنے کی ضرورت ہے۔ پھر آئیے اس کا استعمال کرتے ہوئے ونڈو کو شروع کریں: tk.Tk() فنکشن ایک ونڈو کو اسکرین پر دکھائی دینے کے لیے جب تک آپ اسے دستی طور پر بند نہ کر دیں۔ mainloop() فنکشن یہاں کوڈ ہے:

import tkinter as tk

# screen initialization
root = tk.Tk()

# This keeps the window active
root.mainloop()

کہroot متغیر ہماری ونڈو کی نمائندگی کرتا ہے۔ تو اب اس ونڈو میں ویجٹ شامل کرتے ہیں۔

جب صارف "رن” کو دبائے گا تو اسکرین پر ایک خالی ونڈو نمودار ہوگی جیسا کہ نیچے دی گئی تصویر میں دکھایا گیا ہے۔ مبارک ہو! یہ آپ کا پہلا GUI ہے۔

خالی ٹیکنٹر ونڈو

ونڈو کا نام کیسے رکھیں

ٹائٹل بار میں ظاہر ہونے والا ‘tk’ ونڈو کا ڈیفالٹ ٹائٹل ہے۔ اپنا اپنا ونڈو ٹائٹل سیٹ کرنے کے لیے ہم استعمال کر سکتے ہیں: title() فنکشن درج ذیل کوڈ سے پتہ چلتا ہے کہ یہ کیسے کریں۔

import tkinter as tk

root = tk.Tk()

# Naming the window
root.title("Calculator")

root.mainloop()

جب آپ پروگرام چلاتے ہیں تو درج ذیل ونڈو ظاہر ہوگی۔

عنوان کے ساتھ ایک خالی ونڈو 'کیلکولیٹر' میں بدل گئی

اب آپ دیکھ سکتے ہیں کہ ونڈو کا عنوان کامیابی کے ساتھ تبدیل کر دیا گیا ہے۔

ونڈو میں فریم بنانے کا طریقہ

ونڈو کو ترتیب دینے کے بعد، اب ہمیں اس پر ایک بٹن لگانے کی ضرورت ہے۔ بٹن لگانے کے لیے، آپ کو بٹن رکھنے کے لیے ایک کنٹینر بنانا ہوگا۔

ایک کنٹینر مقامی ونڈو ہو سکتا ہے، لیکن ہم اس منصوبے کے لیے اس سے بچیں گے۔ اس کی وجہ یہ ہے کہ کی بورڈ بنانے کے لیے ہم چاہتے ہیں کہ کچھ بٹن سائیڈ پر اور دوسرے کے نیچے رکھے جائیں۔ چیزوں کو آسان بنانے کے لیے، آئیے ایک فریم کنٹینر بناتے ہیں۔

ایک فریم کنٹینر ونڈوز کے عمودی کالم کی نمائندگی کرتا ہے۔ فریم کا ابتدائی سائز 0 x 0 ہے۔ جیسے ہی آپ ویجیٹ رکھیں گے، اس کے مطابق فریم کا سائز تبدیل ہو جائے گا۔

آئیے ونڈو میں چار فریم بناتے ہیں۔ پہلے فریم میں بٹن 1، 4، 7، اور AC ہیں۔ دوسرے فریم میں بٹن 2، 5، 8، اور 0 ہوتے ہیں، تیسرے فریم میں بٹن 3، 6، 9، اور = ہوتے ہیں، اور آخری فریم میں بٹن +، -، x، اور / ہوتے ہیں (اوپر دکھایا گیا UI جیسا)۔

آپ Tkinter میں یہ استعمال کرکے ایک فریم بنا سکتے ہیں: tk.Frame(). فریم کے پیرنٹ کنٹینر سے گزرتا ہے، یعنی دلیل کی مرکزی ونڈو۔ مندرجہ ذیل کوڈ یہ واضح کرتا ہے:

import tkinter as tk

# screen initialization
root = tk.Tk()

# Naming the window
root.title("Calculator")

# Creating Frames
frame1 = tk.Frame(root)
frame1.pack(side="left", anchor="n")
frame2 = tk.Frame(root)
frame2.pack(side="left", anchor="n")
frame3 = tk.Frame(root)
frame3.pack(side="left", anchor="n")
frame4 = tk.Frame(root)
frame4.pack(side="left", anchor="n")

# This keeps the window active
root.mainloop()

کہ pack() فنکشن ہندسی طور پر ایک ونڈو میں ایک فریم داخل کرتا ہے۔ کہ side="left" پیرامیٹر میں اسکرین کے انتہائی بائیں جانب ایک فریم شامل ہے۔ یہ بطور ڈیفالٹ سینٹر پر سیٹ ہے۔ anchor="n" اشارہ کرتا ہے کہ ویجیٹ کو فریم کے اوپر سے شروع کر کے رکھا جانا چاہیے۔ پہلے سے طے شدہ طور پر، وجیٹس فریم کے بیچ سے شامل ہونے لگتے ہیں۔ ‘این’ میں anchor="n" اس کا مطلب ہے ‘شمال’۔

نوٹ کرنے کی اہم بات یہ ہے کہ جب سے ہم نے وضاحت کی ہے۔ frame1 ابتدائی طور پر، پروگرام ونڈو کے سب سے بائیں حصے پر قبضہ کرتا ہے. لیکن اس کے باوجود frame2 یہ بھی بائیں طرف پر قبضہ کرنے کے لئے مقرر کیا گیا ہے، اور دو فریم ہیں frame1 اور frame2 کوئی اوورلیپ نہیں ہے۔ اس کے بجائے frame2 اسے اس طرح رکھیں کہ یہ اوور لیپنگ کے بغیر ونڈو کے بائیں جانب جہاں تک ممکن ہو۔ frame1. تو فریم frame1، frame2، frame3 اور frame4 وہ کھڑکی کے بائیں جانب ایک ساتھ ہیں۔

ونڈو میں بٹن کیسے شامل کریں۔

آپ Tkinter میں بٹن ویجیٹ بنا سکتے ہیں یہ استعمال کرتے ہوئے: tk.Button() فنکشن کہ tk.Button() ایک فنکشن مختلف پیرامیٹرز پر مشتمل ہوتا ہے:

  • ماسٹر: یہ ہمیں ایک پیرنٹ کنٹینر فراہم کرنے کی اجازت دیتا ہے جہاں بٹن رکھا جانا چاہیے۔ اس کے لیے کنٹینر آبجیکٹ کی ضرورت ہے۔

  • متن: اس پیرامیٹر کو اس متن کو پاس کرنے کی ضرورت ہے جسے آپ بٹن پر ڈسپلے کرنا چاہتے ہیں۔ یہ ایک تار کی توقع کرتا ہے۔

  • فونٹ: یہ ایک ٹوپل کی توقع کرتا ہے جس میں پہلا عنصر فونٹ کا نام دے گا اور اگلا عنصر فونٹ کا سائز دے گا۔

  • ویڈیو: یہ آپ کو بٹن پر تصویر لگانے کی اجازت دیتا ہے۔

  • bg: یہ آپ کو بٹن کے پس منظر کا رنگ سیٹ کرنے کی اجازت دیتا ہے۔

  • fg: یہ آپ کو بٹن کا پیش منظر کا رنگ سیٹ کرنے کی اجازت دیتا ہے۔

  • فعال پس منظر: جب آپ بٹن پر کلک کریں گے، تو اس پیرامیٹر پر گزرنے والا رنگ ظاہر ہوگا۔

  • حکم: یہ آپ کو بٹنوں کے ساتھ کمانڈ کو منسلک کرنے کی اجازت دیتا ہے۔

اب جب کہ آپ بٹن بنانے کی بنیادی باتیں جانتے ہیں، آئیے اصل میں کیلکولیٹر کا کی بورڈ بنائیں۔

کی بورڈ بنانے کے لیے ونڈو میں کافی بٹن رکھنے کی ضرورت ہوتی ہے۔ چیزوں کو آسان بنانے کے لیے، آئیے کسی دوسرے متن کے ساتھ بٹن بنانے کے لیے ایک فنکشن کی وضاحت کریں۔ آئیے نیچے دیے گئے کوڈ کو دیکھتے ہیں۔

import tkinter as tk

# screen initialization
root = tk.Tk()

# Naming the window
root.title("Calculator")

frame1 = tk.Frame(root)
frame1.pack(side="left", anchor="n")
frame2 = tk.Frame(root)
frame2.pack(side="left", anchor="n")
frame3 = tk.Frame(root)
frame3.pack(side="left", anchor="n")
frame4 = tk.Frame(root)
frame4.pack(side="left", anchor="n")

pixel = tk.PhotoImage(width=55, height=55)

def buttons(text, frame):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg="#333300", fg="white", compound="center")
    return button


def buttons_ops(text, frame, bg, fg):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg=bg, fg=fg, activebackground="black",
                        compound="center")
    return button

btn1 = buttons('1',frame1).pack()
btn4 = buttons('4', frame1).pack()
btn7 = buttons('7', frame1).pack()

btn2 = buttons('2', frame2).pack()
btn5 = buttons('5', frame2).pack()
btn8 = buttons('8', frame2).pack()
btn0 = buttons_ops('0', frame2, '#333300', 'white').pack()

plus = buttons_ops('+', frame4, 'black', 'white').pack()
minus= buttons_ops('-', frame4,  'black', 'white').pack()
mul = buttons_ops('x', frame4, 'black', 'white').pack()
div = buttons_ops('/', frame4, 'black', 'white').pack()

btn3 = buttons('3', frame3).pack()
btn6 = buttons('6', frame3).pack()
btn9 = buttons('9', frame3).pack()

# This keeps the window active
root.mainloop()

اب اس کا تجزیہ کرتے ہیں۔

سب سے پہلے میں نے Tkinter امیج آبجیکٹ بنایا بذریعہ: tk.PhotoImage(). یہ ایک شفاف تصویر ہے۔ اس تصویر کو بنانے کا مقصد بٹن کی چوڑائی اور اونچائی کو مکمل طور پر پکسلز میں سیٹ کرنا ہے۔ کہ compound='center' یقینی بنائیں کہ بٹن کا متن شفاف تصویر کے بیچ میں منسلک ہے۔

آپ بٹن کو تبدیل کرکے بٹن کا سائز تبدیل کرسکتے ہیں۔ width اور height پیرامیٹر pixel اعتراض

دوسرا، میں نے ایک فنکشن بنایا جو ‘ٹیکسٹ’ اور ‘کنٹینر فریم’ کو بطور دلیل لیتا ہے۔ فنکشن کے اندر میں نے بٹن آبجیکٹ بنایا اور واپس کیا۔ نمبر بٹن کے لیے میں نے درج ذیل فنکشن بنایا۔ buttons آپریٹر بٹن کے لیے میں نے درج ذیل فنکشن بنایا۔ buttons_ops. یہ مکمل طور پر بٹن کے مختلف انداز (پس منظر اور پیش منظر وغیرہ) کو یقینی بنانے کے لیے کیا گیا تھا۔

آپ بٹن کا رنگ تبدیل کر کے بٹن کا رنگ تبدیل کر سکتے ہیں۔ bg اور fg پیرامیٹر tk.Button() فنکشن

پھر میں نے ان دو فنکشنز کا استعمال کرتے ہوئے تمام بٹن بنائے۔ کہ pack() فنکشن بٹن کو اس مقام پر رکھتا ہے۔ ہم ہیں = اور AC بٹن

جب آپ پروگرام چلاتے ہیں تو درج ذیل ونڈو ظاہر ہوگی۔

بلٹ ان بٹنوں کے ساتھ ونڈو

آپ بٹن پر کلک کر کے چیک کر سکتے ہیں کہ آیا اب تک سب کچھ ٹھیک سے کام کر رہا ہے۔

اپنے کیلکولیٹر میں آؤٹ پٹ اسکرین کیسے شامل کریں۔

کیلکولیٹر کی آؤٹ پٹ اسکرین کے لیے، میں استعمال کرتا ہوں: Entry Tkinter میں اعتراض. کہ Entry اس صورت میں، ایک آبجیکٹ بہترین میچ ہے کیونکہ ہم صارف کے ان پٹ کو ظاہر کرنے کے لیے ایک لائن اسکرین چاہتے ہیں۔ ہم بھی Text اگرچہ یہ ایک آبجیکٹ ہے، یہ ایک ملٹی لائن ایریا فراہم کرتا ہے۔ تو یہاں Entry اعتراض

ہم آؤٹ پٹ اسکرین کو کی بورڈ کے اوپر بھی رکھنا چاہتے ہیں، لہذا ہمیں فریم داخل کرنے سے پہلے اس چیز کی وضاحت اور داخل کرنے کی ضرورت ہے۔

کہ Entry اشیاء کا استعمال کرتے ہوئے تخلیق کیا جاتا ہے: tk.Entry() فنکشن اس کے پیرامیٹرز مندرجہ ذیل سے ملتے جلتے ہیں: tk.Button() فنکشن درج ذیل کوڈ ایک ان پٹ باکس بناتا ہے۔

import tkinter as tk

# screen initialization
root = tk.Tk()

# Naming the window
root.title("Calculator")

# creating the output screen
entry = tk.Entry(root, width=9, font=('Arial', 38, 'bold'), state="readonly")
entry.pack(pady=(30, 10))


frame1 = tk.Frame(root)
frame1.pack(side="left", anchor="n")
frame2 = tk.Frame(root)
frame2.pack(side="left", anchor="n")
frame3 = tk.Frame(root)
frame3.pack(side="left", anchor="n")
frame4 = tk.Frame(root)
frame4.pack(side="left", anchor="n")

pixel = tk.PhotoImage(width=55, height=55)

def buttons(text, frame):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg="#333300", fg="white", compound="center")
    return button


def buttons_ops(text, frame, bg, fg):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg=bg, fg=fg, activebackground="black",
                        compound="center")
    return button

btn1 = buttons('1',frame1).pack()
btn4 = buttons('4', frame1).pack()
btn7 = buttons('7', frame1).pack()

btn2 = buttons('2', frame2).pack()
btn5 = buttons('5', frame2).pack()
btn8 = buttons('8', frame2).pack()
btn0 = buttons_ops('0', frame2, '#333300', 'white').pack()

plus = buttons_ops('+', frame4, 'black', 'white').pack()
minus= buttons_ops('-', frame4,  'black', 'white').pack()
mul = buttons_ops('x', frame4, 'black', 'white').pack()
div = buttons_ops('/', frame4, 'black', 'white').pack()

btn3 = buttons('3', frame3).pack()
btn6 = buttons('6', frame3).pack()
btn9 = buttons('9', frame3).pack()

# This keeps the window active
root.mainloop()

اوپر کے کوڈ میں entry ایک آبجیکٹ کو مین ونڈو کے طور پر استعمال کریں۔ root. میں ہوں width پیرامیٹر کو 9 پر سیٹ کیا گیا ہے کیونکہ یہ ونڈو اور کی بورڈ کے سائز کے ساتھ اچھی طرح فٹ بیٹھتا ہے۔ آپ کامل سائز کی آؤٹ پٹ اسکرین بنانے کے لیے چوڑائی کی مختلف اقدار کے ساتھ تجربہ کر سکتے ہیں۔

ہم pack() یہ آبجیکٹ کی تعریف کے طور پر ایک ہی لائن پر ہے۔ کیونکہ میں اسے استعمال کرتا ہوں۔ pack() آبجیکٹ کی تعریف کے طور پر ان کا ایک ہی لائن پر ہونا برا عمل ہے کیونکہ یہ کچھ خاص فعالیت کو محدود کرتا ہے۔

پھر ہم کیوں pack() کیا آپ بٹن بناتے وقت ایک ہی لائن پر فنکشن انجام دیتے ہیں؟ اس کی وجہ یہ ہے کہ ہم نے اس پروجیکٹ میں بٹن کا زیادہ کام نہیں کیا، اس لیے ہم نے کوڈ کی لائنوں کو کم کرنے کی کوشش کی۔

پر tk.Entry() خصوصیات، ہم نے مقرر کیا state="readonly". یہ متن کو براہ راست آؤٹ پٹ اسکرین میں داخل ہونے سے روکتا ہے۔ اس کا مطلب یہ ہے کہ بٹن صرف آؤٹ پٹ اسکرین پر حروف کو ظاہر کرنے کے لیے استعمال کیا جا سکتا ہے۔ پہلے سے طے شدہ طور پر یہ سیٹ ہے: state="normal"آپ اپنے کی بورڈ سے براہ راست ان پٹ باکس میں ٹائپ کر سکتے ہیں۔

کہ pady اندرونی پیرامیٹرز pack() فنکشن آبجیکٹ کے اوپر اور نیچے پکسلز کی ایک دی گئی مقدار چھوڑتا ہے۔ اس کام کو پورا کرنے کے لیے، ہم کہتے ہیں کہ ہم ہر طرف 10 پکسلز آبجیکٹ کو پیڈ کرنا چاہتے ہیں۔ pady=10 .

یہاں ہم چیز کے اوپر اور نیچے پیڈنگ کی ایک ہی مقدار نہیں چاہتے تھے۔ لہذا ہم نے ایک ٹوپل کا استعمال کیا جس میں پہلا عنصر آؤٹ پٹ اسکرین کے اوپر پیڈ کرنے کے لیے پکسلز کی نمائندگی کرتا ہے اور دوسرا عنصر جو آؤٹ پٹ اسکرین کے نیچے پیڈ کیے جانے کے لیے پکسلز کی نمائندگی کرتا ہے۔

ہمارا GUI اب تک اس طرح لگتا ہے:

بلٹ ان آؤٹ پٹ اسکرین والی ونڈو

اب آپ دیکھ سکتے ہیں کہ آپ کی آؤٹ پٹ اسکرین بالکل ترتیب دی گئی ہے۔

آؤٹ پٹ اسکرین پر نمبر کیسے ڈسپلے کریں۔

اگلا مرحلہ آؤٹ پٹ اسکرین پر حروف کو ظاہر کرنا ہے۔ ہر بٹن جس پر ہم کلک کرتے ہیں اسے آؤٹ پٹ اسکرین پر پیش کیا جانا چاہیے۔ ایسا کرنے کے لیے، ہمیں ہر بٹن سے ایک کمانڈ جوڑنے کی ضرورت ہے۔ سب سے پہلے، آئیے کوڈ پر ایک نظر ڈالیں اور دیکھیں کہ یہ کیسے کام کرتا ہے۔

import tkinter as tk

# screen initialization
root = tk.Tk()

# Naming the window
root.title("Calculator")

entry = tk.Entry(root, width=9, font=('Arial', 38, 'bold'),state="readonly")
entry.pack(pady=(30, 10))


frame1 = tk.Frame(root)
frame1.pack(side="left", anchor="n")
frame2 = tk.Frame(root)
frame2.pack(side="left", anchor="n")
frame3 = tk.Frame(root)
frame3.pack(side="left", anchor="n")
frame4 = tk.Frame(root)
frame4.pack(side="left", anchor="n")

pixel = tk.PhotoImage(width=55, height=55)

def command(text):
    entry.config(state="normal")
    entry.insert(tk.END, text) 
    entry.config(state="readonly")  


def buttons(text, frame):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg="#333300", fg="white", compound="center",
                       command=lambda :command(text))
    return button


def buttons_ops(text, frame, bg, fg):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg=bg, fg=fg, activebackground="black",
                        compound="center", command=lambda:command(text))
    return button

btn1 = buttons('1',frame1).pack()
btn4 = buttons('4', frame1).pack()
btn7 = buttons('7', frame1).pack()

btn2 = buttons('2', frame2).pack()
btn5 = buttons('5', frame2).pack()
btn8 = buttons('8', frame2).pack()
btn0 = buttons_ops('0', frame2, '#333300', 'white').pack()

plus = buttons_ops('+', frame4, 'black', 'white').pack()
minus= buttons_ops('-', frame4,  'black', 'white').pack()
mul = buttons_ops('x', frame4, 'black', 'white').pack()
div = buttons_ops('/', frame4, 'black', 'white').pack()

btn3 = buttons('3', frame3).pack()
btn6 = buttons('6', frame3).pack()
btn9 = buttons('9', frame3).pack()

# This keeps the window active
root.mainloop()

مندرجہ بالا کوڈ میں، ہم نے درج ذیل نئے افعال کی وضاحت کی ہے۔ command(). یہ فنکشن ایک دلیل لیتا ہے۔ text. فنکشن کے اندر میں نے درج ذیل کو تبدیل کیا: state کی entry مخالفت normal کے ذریعے config. اس طرح اب آپ متن کو تبدیل کر سکتے ہیں۔ entry اعتراض

پھر ہم insert() کے لئے تقریب entry اعتراض کہ insert() فنکشن ہے text موجودہ کریکٹر سیٹ کے لیے دلائل۔

پہلی دلیل یہ ہے۔ insert() فنکشن انڈیکس لیتا ہے جہاں متن داخل کیا جائے گا۔ tk.END آبجیکٹ میں متن کے آخری کردار کی نشاندہی کرتا ہے۔ دوسری دلیل یہ ہے۔ insert() فنکشن متن کو داخل کرنے کے لیے لیتا ہے۔

آخر میں ہم state واپس ہدف پر readonly وضاحت شدہ کیلکولیٹر کی بورڈ کے علاوہ بیرونی ان پٹ کو روکتا ہے۔

اب buttons اور buttons_ops فنکشن ہم command پیرامیٹرز tk.Button() فنکشن کہ lambda پروگرام کو صرف اس وقت کمانڈ کرنے کی ہدایت کرتا ہے جب آپ کسی بٹن پر کلک کریں۔

مجموعی طور پر، command=lambda:command(text) جب آپ اب تک بیان کردہ بٹن پر کلک کرتے ہیں، command() ایک فنکشن انجام دیتا ہے اور آؤٹ پٹ اسکرین پر دبائے ہوئے بٹن کیریکٹر کو دکھاتا ہے۔

اب ونڈو میں کچھ بٹنوں پر کلک کرنے کی کوشش کریں۔ اسے آؤٹ پٹ اسکرین میں ظاہر ہونا چاہئے جیسا کہ ذیل میں دکھایا گیا ہے۔

کیلکولیٹر تصویر کیلکولیٹر اسکرین پر ان پٹ دکھا رہی ہے۔

اب آپ کو ایک مسئلہ درپیش ہو سکتا ہے۔ جب میں نے بہت سارے حروف ٹائپ کیے تو میں صرف ابتدائی چند حروف دیکھ سکا۔ باقی نظر نہیں آرہے تھے۔

اس مسئلے کو حل کرنے کے لیے، آئیے آؤٹ پٹ اسکرین میں اسکرول بار شامل کریں۔

سب سے پہلے، اس کے ساتھ اسکرول بار آبجیکٹ بنائیں: tk.Scrollbar() پہلے entry اعتراض درج ذیل کوڈ سے پتہ چلتا ہے کہ کیسے:

import tkinter as tk

# screen initialization
root = tk.Tk()

# Naming the window
root.title("Calculator")

scrollbar = tk.Scrollbar(root, orient="horizontal")

entry = tk.Entry(root, width=9, font=('Arial', 38, 'bold'), state="readonly", xscrollcommand=scrollbar.set)
entry.pack(pady=(30, 10))

scrollbar.config(command=entry.xview)
scrollbar.pack()

frame1 = tk.Frame(root)
frame1.pack(side="left", anchor="n")
frame2 = tk.Frame(root)
frame2.pack(side="left", anchor="n")
frame3 = tk.Frame(root)
frame3.pack(side="left", anchor="n")
frame4 = tk.Frame(root)
frame4.pack(side="left", anchor="n")

pixel = tk.PhotoImage(width=55, height=55)

def command(text):
    entry.config(state="normal")
    entry.insert(tk.END, text)
    entry.config(state="readonly")


def buttons(text, frame):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg="#333300", fg="white", compound="center",
                       command=lambda :command(text))
    return button


def buttons_ops(text, frame, bg, fg):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg=bg, fg=fg, activebackground="black",
                        compound="center", command=lambda:command(text))
    return button

btn1 = buttons('1',frame1).pack()
btn4 = buttons('4', frame1).pack()
btn7 = buttons('7', frame1).pack()

btn2 = buttons('2', frame2).pack()
btn5 = buttons('5', frame2).pack()
btn8 = buttons('8', frame2).pack()
btn0 = buttons_ops('0', frame2, '#333300', 'white').pack()

plus = buttons_ops('+', frame4, 'black', 'white').pack()
minus= buttons_ops('-', frame4,  'black', 'white').pack()
mul = buttons_ops('x', frame4, 'black', 'white').pack()
div = buttons_ops('/', frame4, 'black', 'white').pack()

btn3 = buttons('3', frame3).pack()
btn6 = buttons('6', frame3).pack()
btn9 = buttons('9', frame3).pack()

# This keeps the window active
root.mainloop()

کہ orient پیرامیٹر tk.Scrollbar() اعتراض اسکرول بار کی نوعیت کا تعین کرتا ہے۔ یہاں ہم نے اسے X محور کے ساتھ جوڑ دیا ہے۔ پیرامیٹر کو اصل میں بھی شامل کیا گیا۔ entry اعتراض کہ xscrollcommand اسکرول بار کو آؤٹ پٹ اسکرین پر سیٹ کریں۔

اس کے بعد میں نے مندرجہ ذیل ترتیب دے کر اسکرول بار کو آئٹم آبجیکٹ سے منسلک کیا۔ command=entry.xview آؤٹ پٹ اسکرین میں اسکرول بار شامل کیا گیا۔

درج ذیل تصویر اسکرول بار کو دکھاتی ہے۔ آپ متن کے ذریعے آگے پیچھے تشریف لے جانے کے لیے تیر کے نشانات کا استعمال کر سکتے ہیں۔

اسکرول بار کے ساتھ کیلکولیٹر کی تصویر

مساوی بٹن کیسے شامل کریں۔

ہم نے ابھی تک نہیں بنایا ہے equal to بٹن – اب یہ کرتے ہیں۔ شروع کرنے کے لیے، آئیے اس طرح ایک فنکشن کی وضاحت کریں: cmd_equal(). اس فنکشن میں، سب سے پہلے state کی entry کو normal. پھر اس کا استعمال کرتے ہوئے آؤٹ پٹ اسکرین پر متن کو نکالیں: entry.get() فنکشن چلائیں اور ‘x’ کو ‘*’ سے تبدیل کریں۔ ہم ایسا کرتے ہیں کیونکہ ضرب کی نمائندگی ‘x’ کے بجائے ‘*’ سے ہوتی ہے۔

پھر try-except بلاک آئیے ازگر کے بلٹ ان فنکشنز کا استعمال کرتے ہوئے نکالے گئے ریاضیاتی اظہار کا اندازہ کرتے ہیں۔ eval() فنکشن اگر یہ غلط ہے، تو یہ غلطی کو بڑھانے کے بجائے اسکرین پر ‘غلط’ پرنٹ کرتا ہے۔

import tkinter as tk

# screen initialization
root = tk.Tk()

# Naming the window
root.title("Calculator")

scrollbar = tk.Scrollbar(root, orient="horizontal")

entry = tk.Entry(root, width=9, font=('Arial', 38, 'bold'), state="readonly", xscrollcommand=scrollbar.set)
entry.pack(pady=(30, 10))

scrollbar.config(command=entry.xview)
scrollbar.pack()

frame1 = tk.Frame(root)
frame1.pack(side="left", anchor="n")
frame2 = tk.Frame(root)
frame2.pack(side="left", anchor="n")
frame3 = tk.Frame(root)
frame3.pack(side="left", anchor="n")
frame4 = tk.Frame(root)
frame4.pack(side="left", anchor="n")

pixel = tk.PhotoImage(width=55, height=55)

def command(text):
    entry.config(state="normal")
    entry.insert(tk.END, text)
    entry.config(state="readonly")

def cmd_equal():
    entry.config(state="normal")
    txt = entry.get().replace('x', '*')

    try:
        result = eval(txt)

    except:
        result="INVALID"
    entry.delete(0, tk.END)
    entry.insert(tk.END, result)
    entry.config(state="readonly")   


def buttons(text, frame):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg="#333300", fg="white", compound="center",
                       command=lambda :command(text))
    return button


def buttons_ops(text, frame, bg, fg):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg=bg, fg=fg, activebackground="black",
                        compound="center", command=lambda:command(text))
    return button

btn1 = buttons('1',frame1).pack()
btn4 = buttons('4', frame1).pack()
btn7 = buttons('7', frame1).pack()

btn2 = buttons('2', frame2).pack()
btn5 = buttons('5', frame2).pack()
btn8 = buttons('8', frame2).pack()
btn0 = buttons_ops('0', frame2, '#333300', 'white').pack()

plus = buttons_ops('+', frame4, 'black', 'white').pack()
minus= buttons_ops('-', frame4,  'black', 'white').pack()
mul = buttons_ops('x', frame4, 'black', 'white').pack()
div = buttons_ops('/', frame4, 'black', 'white').pack()

btn3 = buttons('3', frame3).pack()
btn6 = buttons('6', frame3).pack()
btn9 = buttons('9', frame3).pack()
equal= tk.Button(frame3, text="=", font=('Arial', 20), image=pixel, bg='white', fg='black', activebackground="black",
                        compound="center", command=lambda: cmd_equal()).pack()

# This keeps the window active
root.mainloop()

یہاں بھی ہم entry.delete(). یہ فنکشن آؤٹ پٹ اسکرین پر پہلی دلیل کے انڈیکس (یعنی انڈیکس 0 سے شروع ہونے والے) سے آخری دلیل کے انڈیکس تک، یعنی ٹیکسٹ کے اختتام تک تمام متن کو حذف کر دیتا ہے (جس سے اشارہ کیا جاتا ہے)۔ tk.END

پھر میں نے نتائج کو آؤٹ پٹ اسکرین میں استعمال کرتے ہوئے داخل کیا: entry.insert(). نوٹ کرنے کی اہم بات یہ ہے۔ equal to تعریف کے نیچے بٹن btn9 اسی فریم میں۔ یہ ہمارا ہے۔ equal to بٹن کو صحیح پوزیشن میں رکھیں۔

درج ذیل تصاویر میں بالترتیب ابتدائی اور آخری اسکرینیں دکھائی دیتی ہیں۔

کیلکولیٹر ونڈو ریاضی کے تاثرات دکھا رہی ہے۔

مساوی بٹن پر کلک کرنے سے درج ذیل کام ہوتے ہیں:

کیلکولیٹر ونڈو تشخیص شدہ ریاضیاتی اظہار دکھا رہی ہے۔

AC بٹن کیسے شامل کریں۔

اب آخر میں آخری فنکشن کی وضاحت کرتے ہیں۔ cmd_ac(). یہ فنکشن آؤٹ پٹ اسکرین پر موجود ہر چیز کو حذف کر دیتا ہے۔ پہلے state کو normalاستعمال کرتے ہوئے entry.delete()آخر میں state دوبارہ readonly. پھر اس فنکشن کو استعمال کریں۔ command() پیرامیٹر ac بٹن

ونڈو کے پھیلنے پر UI کو جدا ہونے سے روکنے کے لیے۔ resizable() فنکشن یہ فنکشن دو دلائل لیتا ہے۔ ایک چوڑائی کی توسیع کی اجازت کے مساوی ہے اور دوسرا اونچائی کے مساوی ہے۔ ونڈو کی توسیع کو روکنے کے لیے، آئیے دونوں پیرامیٹرز کو اس پر سیٹ کریں: False.

تو حتمی کوڈ یہ ہوگا:

import tkinter as tk

# screen initialization
root = tk.Tk()

# Naming the window
root.title("Calculator")

scrollbar = tk.Scrollbar(root, orient="horizontal")

entry = tk.Entry(root, width=9, font=('Arial', 38, 'bold'), state="readonly", xscrollcommand=scrollbar.set)
entry.pack(pady=(30, 10))

scrollbar.config(command=entry.xview)
scrollbar.pack()

frame1 = tk.Frame(root)
frame1.pack(side="left", anchor="n")
frame2 = tk.Frame(root)
frame2.pack(side="left", anchor="n")
frame3 = tk.Frame(root)
frame3.pack(side="left", anchor="n")
frame4 = tk.Frame(root)
frame4.pack(side="left", anchor="n")

pixel = tk.PhotoImage(width=55, height=55)

def command(text):
    entry.config(state="normal")
    entry.insert(tk.END, text)
    entry.config(state="readonly")

def cmd_ac():
    entry.config(state="normal")
    entry.delete(0, tk.END)
    entry.config(state="readonly")

def cmd_equal():
    entry.config(state="normal")
    txt = entry.get().replace('x', '*')

    try:
        result = eval(txt)

    except:
        result="INVALID"
    entry.delete(0, tk.END)
    entry.insert(tk.END, result)
    entry.config(state="readonly")


def buttons(text, frame):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg="#333300", fg="white", compound="center",
                       command=lambda :command(text))
    return button


def buttons_ops(text, frame, bg, fg):
    button = tk.Button(frame, text=text, font=('Arial', 20), image=pixel, bg=bg, fg=fg, activebackground="black",
                        compound="center", command=lambda:command(text))
    return button

btn1 = buttons('1',frame1).pack()
btn4 = buttons('4', frame1).pack()
btn7 = buttons('7', frame1).pack()
ac = tk.Button(frame1, text="AC", font=('Arial', 20), image=pixel, bg="#666699", fg="white", compound="center",
                        command=lambda: cmd_ac()).pack()

btn2 = buttons('2', frame2).pack()
btn5 = buttons('5', frame2).pack()
btn8 = buttons('8', frame2).pack()
btn0 = buttons_ops('0', frame2, '#333300', 'white').pack()

plus = buttons_ops('+', frame4, 'black', 'white').pack()
minus= buttons_ops('-', frame4,  'black', 'white').pack()
mul = buttons_ops('x', frame4, 'black', 'white').pack()
div = buttons_ops('/', frame4, 'black', 'white').pack()

btn3 = buttons('3', frame3).pack()
btn6 = buttons('6', frame3).pack()
btn9 = buttons('9', frame3).pack()
equal= tk.Button(frame3, text="=", font=('Arial', 20), image=pixel, bg='white', fg='black', activebackground="black",
                        compound="center", command=lambda: cmd_equal()).pack()


root.resizable(0,0) 
# This keeps the window active
root.mainloop()

چلائیں پر کلک کریں اور آپ کو حتمی پروجیکٹ نظر آئے گا۔

ختم

اب آپ جانتے ہیں کہ ایک سادہ ریاضی کا کیلکولیٹر کیسے بنایا جائے۔ آپ اس کیلکولیٹر میں مزید خصوصیات شامل کرنے کی کوشش کر سکتے ہیں تاکہ ان تصورات کو تقویت ملے جو آپ نے یہاں سیکھے ہیں۔ جو کچھ آپ نے یہاں سیکھا ہے اس پر عمل کرنے کے لیے کچھ خیالات یہ ہیں:

  • صارفین کو فریکشن کے ساتھ کام کرنے کی اجازت دینے کے لیے اپنے کیلکولیٹر میں اعشاریہ کا بٹن شامل کریں۔

  • صارفین کو فیصد کا حساب لگانے کی اجازت دینے کے لیے کیلکولیٹر میں فیصد بٹن شامل کریں۔

  • کیلکولیٹر میں ڈیلیٹ بٹن شامل کریں جو پوری سکرین کو صاف کرنے کے بجائے ایک وقت میں ایک کریکٹر کو حذف کر دیتا ہے۔

  • ایک کیلکولیٹر کو ‘کمپیوٹر کی بورڈ انٹرایکٹو’ بنانا، یعنی کمپیوٹر کی بورڈ سے براہ راست ان پٹ کی اجازت دینا۔ (ایسا کرنے کے لیے اشارے: state کی entry مخالفت normal‘غلط’ اظہار کے لیے شرط شامل کی گئی)۔

پڑھنے کے لیے شکریہ!

اوپر تک سکرول کریں۔