পরিচয়
পাইথনে, আমরা 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 থেকেও পেতে পারেন৷
আউটপুট