Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 tkinter를 사용하여 간단한 GUI 계산기를 빌드하는 방법

<시간/>

소개

Python에서는 tkinter 라이브러리를 사용합니다. GUI 구성 요소를 만들고 더 나은 사용자 인터페이스를 만들 수 있습니다.

이 기사에서는 간단한 GUI 기반 계산기 애플리케이션을 구축하는 방법을 배울 것입니다.

시작하기

시작하기 전에 먼저 정리해야 할 몇 가지 사항이 있습니다.

로컬 시스템에서 이미지를 가져오는 데 사용할 Python의 이미징 라이브러리를 다운로드하여 시작하겠습니다. PIL(Pillow)을 설치하려면 터미널을 실행하고 아래 명령어를 입력하세요.

pip install Pillow

이제 패키지가 설치되었습니다. 계산기에 필요한 아이콘을 다운로드해야 합니다.

구글 이미지로 이동하여 필요한 아이콘을 다운로드할 수 있습니다. 그러나 이 프로젝트에 사용한 것과 동일한 아이콘 세트를 원하면 −

에서 다운로드할 수 있습니다.

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

모든 아이콘을 "asset"이라는 폴더에 다운로드해야 합니다.

다음으로 필요한 모듈을 가져와야 합니다.

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")

위의 라인과 유사하게 button2, button3, 그리고 모든 숫자와 기호를 덮을 때까지 계속하십시오.

그리고 그게 다야. 지금 프로그램을 실행하면 매우 추상적으로 보이는 계산기를 보게 될 것입니다.

후속 조치를 취할 수 없는 경우 아래에서 전체 코드를 가져갈 수 있습니다.

예시

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에서도 얻을 수 있습니다.

출력

Python에서 tkinter를 사용하여 간단한 GUI 계산기를 빌드하는 방법