Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでtkinterを使用して簡単なGUI計算機を構築する方法


はじめに

Pythonでは、tkinterライブラリを使用します GUIコンポーネントを作成し、より優れたユーザーインターフェイスを作成します。

この記事では、簡単なGUIベースの電卓アプリケーションを構築する方法を学びます。

はじめに

それに飛び込む前に、最初に整理する必要があることがいくつかあります。

ローカルシステムから画像を取得するために使用するPythonの画像ライブラリをダウンロードすることから始めましょう。 PIL(Pillow)をインストールするには、ターミナルを起動して以下のコマンドを入力します。

pip install Pillow

これでパッケージがインストールされました。電卓に必要なアイコンをダウンロードする必要があります。

Google画像検索にアクセスして、必要なアイコンをダウンロードできます。ただし、このプロジェクトで使用したものと同じアイコンのセットが必要な場合は、-

からダウンロードできます。

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コンポーネントが使用する関数を作成する必要があります。

主な機能は3つあり、1つは数字または記号を押したとき、もう1つは等号ボタンを押したとき、最後にクリアボタンを押したときです。

まず、いくつかのグローバル変数を初期化します-

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)

上記のコード行は、完璧な計算機を構成します。

−エラーが発生しないように、上記のコードとまったく同じファイル構造に従っていることを確認してください。アセットフォルダ内にあるCalculatorフォルダ内にロゴアイコンを保存します。

以下のフォーマットに従ってください-

+---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ウィンドウにアイコンを1つずつ追加するという繰り返しの手順に従います。以下はその一例です。残りはそれに従うか、この記事の最後にある完全なコードからコピーしてください。

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計算機を構築する方法


  1. PythonTkinterを使用した簡単な登録フォーム

    Tkinterは、GUI(グラフィカルユーザーインターフェイス)を開発するためのPythonライブラリです。 tkinterライブラリを使用してUI(ユーザーインターフェイス)のアプリケーションを作成し、ウィンドウやその他すべてのグラフィカルユーザーインターフェイスを作成します。 python 3.x(推奨)を使用している場合、TkinterにはPythonが標準パッケージとして付属しているため、使用するために何もインストールする必要はありません。 Tkinterで登録フォームを作成する前に、まずTkinterで簡単なGUIアプリケーションを作成しましょう。 簡単なGUIアプリケーションの

  2. PythonでTkinterを使用したカラーゲーム

    GUIアプリケーションの開発では、tkinterは非常に人気があり簡単です。 tkinterを使用すると、GUIゲームを簡単に開発できます。 ここでもカラーゲームの開発を試みています。このゲームでは、プレーヤーは画面に表示される単語の色を入力する必要があるため、スコアが1つ増えます。このゲームをプレイする合計時間は、30秒で、このゲームで使用される色は、赤、青、緑、ピンク、ブラック、イエロー、オレンジ、ホワイト、パープル、ブラウン。インターフェイスには、さまざまな色の名前がさまざまな色で表示されます。ゲームに勝つには、ユーザーは色を識別し、正しい色の名前を入力する必要があります。 サンプルコ