কম্পিউটার

পাইথনে tkinter ব্যবহার করে কিভাবে একটি সাধারণ GUI ক্যালকুলেটর তৈরি করবেন


পরিচয়

পাইথনে, আমরা tkinter লাইব্রেরি ব্যবহার করি GUI উপাদান তৈরি করতে এবং আরও ভালো ইউজার ইন্টারফেস তৈরি করতে।

এই নিবন্ধে আপনি একটি সাধারণ GUI ভিত্তিক ক্যালকুলেটর অ্যাপ্লিকেশন তৈরি করার পদ্ধতিগুলি শিখবেন৷

শুরু করা

আমরা এতে ঝাঁপিয়ে পড়ার আগে, আমাদের প্রথমে সংগঠিত হওয়া দরকার কয়েকটি জিনিস।

আসুন পাইথনের ইমেজিং লাইব্রেরি ডাউনলোড করে শুরু করি যা আমরা আমাদের স্থানীয় সিস্টেম থেকে ছবি পেতে ব্যবহার করব। পিআইএল(বালিশ) ইনস্টল করার জন্য, আপনার টার্মিনাল চালু করুন এবং নীচের কমান্ডটি টাইপ করুন।

pip install Pillow

এখন আপনি প্যাকেজ ইনস্টল করা আছে. আপনাকে ক্যালকুলেটরের জন্য প্রয়োজনীয় আইকন ডাউনলোড করতে হবে।

আপনি গুগল ইমেজে যেতে পারেন এবং প্রয়োজনীয় আইকন ডাউনলোড করতে পারেন। যাইহোক, আপনি যদি এই প্রকল্পের জন্য আমি ব্যবহার করেছি আইকনগুলির একই সেট চান তবে আপনি এটি থেকে ডাউনলোড করতে পারেন −

https://www.dropbox.com/sh/0zqd6zd9b8asmor/AAC3d2iOvMRl8INkbCuMUo_ya?dl=0.

নিশ্চিত করুন যে আপনি "সম্পদ" নামে একটি ফোল্ডারে সমস্ত আইকন ডাউনলোড করেছেন৷

পরবর্তীতে, আমাদের প্রয়োজনীয় মডিউলগুলি আমদানি করতে হবে৷

from tkinter import *
from PIL import Image # pip install Pillow
from PIL import ImageTk

এবং এটাই. আপনাকে এখন সবকিছু সেট আপ করতে হবে এবং শুরু করার জন্য প্রস্তুত থাকতে হবে৷

ফাংশন তৈরি করা

প্রথমত, আমাদের অবশ্যই ফাংশনগুলি তৈরি করতে হবে যেগুলি GUI উপাদানগুলি ব্যবহার করবে৷

তিনটি প্রধান ফাংশন আছে, একটি যখন সংখ্যা বা চিহ্নটি চাপা হয়, আরেকটি যখন ইকুয়াল টু বোতামটি চাপানো হয় এবং তারপরে যখন পরিষ্কার বোতামটি চাপানো হয়।

আসুন প্রথমে কয়েকটি গ্লোবাল ভেরিয়েবল −

শুরু করি
txt = ""
res = False
ans = 0

উদাহরণ

ফাংশন যখন কী-এর সংখ্যা চাপা হয় -

def press(num):
   global txt, ans, res
   if (res==True):
      txt = ans
      res = False
   txt = txt + str(num)
   equation.set(txt)

উদাহরণ1

ইকুয়াল টু বোতাম চাপলে ফাংশন −

def equal():
   try:
      global txt, ans, res
      ans = str(eval(txt))
      equation.set(ans)
      res = True
   except:
      equation.set("ERROR : Invalid Equation")
      txt=""

পরিষ্কার বোতাম টিপলে ফাংশন -

উদাহরণ

def clear():
   global txt, ans, res
   txt = ""
   equation.set("")
   res = False

এখন যেহেতু আমরা ফাংশনগুলিকে সংজ্ঞায়িত করেছি, আমরা মূল ফাংশনটি শুরু করতে পারি এবং GUI উপাদানগুলিতে কাজ শুরু করতে পারি৷

if __name__ == "__main__":
   window = Tk()
   window.configure(background="black")
   window.title("Calculator")
   window.iconbitmap("assets\Calculator\Logo.ico")
   window.geometry("343x417")
   window.resizable(0,0)

কোডের উপরের লাইনগুলো একটি নিখুঁত ক্যালকুলেটর গঠন করবে।

দ্রষ্টব্য - ত্রুটিগুলি এড়াতে, উপরের কোডের মতো সঠিক ফাইলের কাঠামো অনুসরণ করুন তা নিশ্চিত করুন৷ ক্যালকুলেটর ফোল্ডারের ভিতরে লোগো আইকনটি সংরক্ষণ করুন যা সম্পদ ফোল্ডারের মধ্যে রয়েছে৷

নীচের বিন্যাস অনুসরণ করুন -

+---Working Directory
   +---Calculator.py
   +---assets
      +---Calculator
         +---All the icons.

এর পরে, আসুন আমরা টেক্সট ফিল্ড ডিজাইন করি যেখানে আমরা সংখ্যাগুলি দেখতে পাব।

equation = StringVar()

txt_field = Entry(relief=RIDGE,textvariable=equation,bd=10,font=("Aerial",20),bg="powder blue")

txt_field.grid(columnspan=4,ipady=10,ipadx=10,sticky="nsew")

এখন, আমরা একে একে GUI উইন্ডোতে আইকন যোগ করার পুনরাবৃত্তিমূলক পদ্ধতি অনুসরণ করব। নীচে এটির একটি একক উদাহরণ, বাকিটির জন্য এটি অনুসরণ করুন বা এই নিবন্ধের শেষে সম্পূর্ণ কোড থেকে এটি অনুলিপি করুন৷

উদাহরণ

width=80
height=80
img1 = Image.open("assets/Calculator/one.PNG")
img1 = img1.resize((width,height))
oneImage = ImageTk.PhotoImage(img1)
button1 = Button(window, image=oneImage,bg="white",command = lambda:press(1),height=height,width=width)
button1.grid(row=2,column=0,sticky="nsew")

উপরের লাইনগুলির মতো, আপনি সমস্ত সংখ্যা এবং চিহ্নগুলি কভার না করা পর্যন্ত বোতাম2, বোতাম3 এবং চালুর জন্য অনুসরণ করুন৷

এবং এটাই. আপনি যদি এখন প্রোগ্রামটি চালান, তাহলে আপনাকে অবশ্যই একটি খুব বিমূর্ত দেখতে ক্যালকুলেটর দেখতে হবে।

আপনি যদি ফলো-আপ করতে না পারেন তাহলে নিচে থেকে সম্পূর্ণ কোডটি নিতে পারেন।

উদাহরণ

from tkinter import *
from PIL import Image
from PIL import ImageTk

txt = ""
res = False
ans = 0

def press(num):
   global txt, ans, res
   if (res==True):
      txt = ans
      res = False
   txt = txt + str(num)
   equation.set(txt)
def equal():
   try:
      global txt, ans, res
      ans = str(eval(txt))
      equation.set(ans)
      res = True
   except:
      equation.set("ERROR : Invalid Equation")
      txt=""
def clear():
   global txt, ans, res
   txt = ""
   equation.set("")
   res = False
if __name__ == "__main__":
   window = Tk()
   window.configure(background="black")
   window.title("Calculator")
   window.iconbitmap("assets\Calculator\Logo.ico")
   window.geometry("343x417")
   window.resizable(0,0)
   equation = StringVar()
   txt_field = Entry(relief=RIDGE,textvariable=equation,bd=10,font=("Aerial",20),bg="powder blue")
   txt_field.grid(columnspan=4,ipady=10,ipadx=10,sticky="nsew")
   width=80
   height=80
   img1 = Image.open("assets/Calculator/one.PNG")
   img1 = img1.resize((width,height))
   oneImage = ImageTk.PhotoImage(img1)
   button1 = Button(window, image=oneImage,bg="white",command =          lambda:press(1),height=height,width=width)
   button1.grid(row=2,column=0,sticky="nsew")
   img2 = Image.open("assets/Calculator/two.PNG")
   img2 = img2.resize((width,height))
   twoImage = ImageTk.PhotoImage(img2)
   button2 = Button(window, image=twoImage,bg="white",command =    lambda:press(2),height=height,width=width)
   button2.grid(row=2,column=1,sticky="nsew")
   img3 = Image.open("assets/Calculator/three.PNG")
   img3 = img3.resize((width,height))
   threeImage = ImageTk.PhotoImage(img3)
   button3 = Button(window, image=threeImage,bg="white",command =    lambda:press(3),height=height,width=width)
   button3.grid(row=2,column=2,sticky="nsew")
   img4 = Image.open("assets/Calculator/four.PNG")
   img4 = img4.resize((width,height))
   fourImage = ImageTk.PhotoImage(img4)
   button4 = Button(window, image=fourImage,bg="white",command =    lambda:press(4),height=height,width=width)
   button4.grid(row=3,column=0,sticky="nsew")
   img5 = Image.open("assets/Calculator/five.PNG")
   img5 = img5.resize((width,height))
   fiveImage = ImageTk.PhotoImage(img5)
   button5 = Button(window, image=fiveImage,bg="white",command =    lambda:press(5),height=height,width=width)
   button5.grid(row=3,column=1,sticky="nsew")
   img6 = Image.open("assets/Calculator/six.PNG")
   img6 = img6.resize((width,height))
   sixImage = ImageTk.PhotoImage(img6)
   button6 = Button(window, image=sixImage,bg="white",command =    lambda:press(6),height=height,width=width)
   button6.grid(row=3,column=2,sticky="nsew")
   img7 = Image.open("assets/Calculator/seven.PNG")
   img7 = img7.resize((width,height))
   sevenImage = ImageTk.PhotoImage(img7)
   button7 = Button(window, image=sevenImage,bg="white",command =    lambda:press(7),height=height,width=width)
   button7.grid(row=4,column=0,sticky="nsew")
   img8 = Image.open("assets/Calculator/eight.PNG")
   img8 = img8.resize((width,height))
   eightImage = ImageTk.PhotoImage(img8)
   button8 = Button(window, image=eightImage,bg="white",command =    lambda:press(8),height=height,width=width)
   button8.grid(row=4,column=1,sticky="nsew")
   img9 = Image.open("assets/Calculator/nine.PNG")
   img9 = img9.resize((width,height))
   nineImage = ImageTk.PhotoImage(img9)
   button9 = Button(window, image=nineImage,bg="white",command =    lambda:press(9),height=height,width=width)
   button9.grid(row=4,column=2,sticky="nsew")
   img0 = Image.open("assets/Calculator/zero.PNG")
   img0 = img0.resize((width,height))
   zeroImage = ImageTk.PhotoImage(img0)
   button0 = Button(window, image=zeroImage,bg="white",command =    lambda:press(0),height=height,width=width)
   button0.grid(row=5,column=1,sticky="nsew")
   imgx = Image.open("assets/Calculator/multiply.PNG")
   imgx = imgx.resize((width,height))
   multiplyImage = ImageTk.PhotoImage(imgx)
   buttonx = Button(window, image=multiplyImage,bg="white",command =    lambda:press("*"),height=height,width=width)
   buttonx.grid(row=2,column=3,sticky="nsew")
   imgadd = Image.open("assets/Calculator/add.PNG")
   imgadd = imgadd.resize((width,height))
   addImage = ImageTk.PhotoImage(imgadd)
   buttonadd = Button(window, image=addImage,bg="white",command =    lambda:press("+"),height=height,width=width)
   buttonadd.grid(row=3,column=3,sticky="nsew")
   imgdiv = Image.open("assets/Calculator/divide.PNG")
   imgdiv = imgdiv.resize((width,height))
   divImage = ImageTk.PhotoImage(imgdiv)
   buttondiv = Button(window, image=divImage,bg="white",command =    lambda:press("/"),height=height,width=width)
   buttondiv.grid(row=5,column=3,sticky="nsew")
   imgsub = Image.open("assets/Calculator/subtract.PNG")
   imgsub = imgsub.resize((width,height))
   subImage = ImageTk.PhotoImage(imgsub)
   buttonsub = Button(window, image=subImage,bg="white",command = lambda:press("-   "),height=height,width=width)
   buttonsub.grid(row=4,column=3,sticky="nsew")
   imgeq = Image.open("assets/Calculator/equal.PNG")
   imgeq = imgeq.resize((width,height))
   eqImage = ImageTk.PhotoImage(imgeq)
   buttoneq = Button(window, image=eqImage,bg="white",command = equal,height=height,width=width)
   buttoneq.grid(row=5,column=2,sticky="nsew")
   imgclear = Image.open("assets/Calculator/clear.PNG")
   imgclear = imgclear.resize((width,height))
   clearImage = ImageTk.PhotoImage(imgclear)
   buttonclear = Button(window, image=clearImage,bg="white",command =    clear,height=height,width=width)
buttonclear.grid(row=5,column=0,sticky="nsew")

window.mainloop()

উপরের প্রোগ্রামের সাথে আপনার যদি ফর্ম্যাটিং সমস্যা হয় তবে আপনি এটি https://github.com/SVijayB/PyHub/blob/master/Graphics/Simple%20Calculator.py থেকেও পেতে পারেন৷

আউটপুট

পাইথনে tkinter ব্যবহার করে কিভাবে একটি সাধারণ GUI ক্যালকুলেটর তৈরি করবেন


  1. পাইথনে Tkinter ব্যবহার করে সহজ GUI ক্যালকুলেটর

  2. পাইথনে Tkinter প্রোগ্রামিং

  3. Python Tkinter ব্যবহার করে সহজ রেজিস্ট্রেশন ফর্ম

  4. পাইথনে Tkinter ব্যবহার করে রঙিন খেলা