2022. március 30., szerda

Egyszerű számológép Pythonban grafikus felhasználói felülettel

A matematikai számításokhoz számológépet használnak. Minden modern eszköznek van számológépe. Létre kell hoznia egy egyszerű Python-kódot az alapvető aritmetikai műveletek szöveges formában történő megvalósításához. Ebben a bejegyzésben megvitatjuk, hogyan lehet egyszerű számológépet létrehozni Pythonban grafikus felhasználói felülettel. A grafikus felhasználói felület a graphics.py modulban elérhető Graphics függvényekkel jön létre.

A rendelkezésre álló általános számológép-alkalmazások váltogathatók az alapvető, a bináris és a tudományos alkalmazások között. De a kód, amit itt csinálunk, nagyon alapvető. Másolhatja, bővítheti és használhatja. A kiterjesztett kódot megoszthatja velünk.

Tehát kezdjük és használjuk a Python Graphics metódusait (a graphics.py webhelyről ), amelyeket a korábbi bejegyzésekben megértettünk . Készítsünk egy kicsi és alapvető, de elképesztően izgalmas grafikus programot Pythonban.

1. lépés Az egyszerű számológép felülete a Pythonban
A grafikus felhasználói felülettel rendelkező Python egyszerű számológép létrehozásának első lépése a felület megtervezése. Az általunk létrehozott felület az alábbi képességekkel rendelkezik:

Írja be a számjegyeket a számgombok megnyomásával, és jelenítse meg a szöveges objektumban
Válassza ki a műveletet (összeadás/szorzás/kivonás/osztás) a kezelőgombokkal, és jelenítse meg az eredményt a szöveges objektumban
Egyenlő (=) gomb a kifejezés kiértékeléséhez és az eredmény megjelenítéséhez
Törölje a „C” gombot a szöveg objektum aktuális tartalmának törléséhez

A GraphWin osztálykonstruktor meghívása ablakobjektum létrehozására szolgál.

Létrejön egy szövegobjektum, amely tárolja a kattintott gombokat és operátorokat.

Téglalap alakú objektumok jönnek létre a szám és az operátor gombok formájában történő megjelenítésére.
Egy Téglalap objektum a tiszta gomb létrehozásához a szöveges objektum tartalmának törléséhez.
2. lépés A műveletek kódolása
A második lépés a funkcionalitás hozzáadása. Az ablak minden gombjának létrehozásakor a bal felső sarok koordinátái és a jobb alsó sarok koordinátái két tömbben tárolódnak (art és arrf).

Amikor a felhasználó rákattint, az adott pont koordinátáit a getMouse funkció segítségével olvassa ki. összehasonlítjuk a két tömbben tárolt pontkoordinátákkal. Ez annak meghatározására szolgál, hogy a felhasználó melyik gombra kattintott. Ennek használatával az érték egy karakterláncban tárolódik és megjelenik az eredmény Szöveg objektumban.

Amikor a felhasználó rákattint a „=” gomb téglalapjára, a rendszer kiértékeli az operátorokkal és számokkal készített karakterláncot. Kiértékeléshez a Python eval függvényt a karakterlánc paraméterként való átadásával hívjuk meg. Eredménye rajzolási módszerrel az eredmény Szövegobjektumba kerül

Itt található a grafikus felhasználói felülettel rendelkező Python Simple Calculator teljes forráskódja. 
-------------------------

Neve: Graphics.py 

import time

from graphics import *

def main():
    workArea = GraphWin('A Simple Python timer', 250, 350) # adja meg a címet és a méreteket
    workArea.setBackground('blue')
    calexp=Rectangle(Point(50,10),Point(190,40))
    calexp.setFill("yellow")
    calexp.draw(workArea)
    arrf=[]
    arrt=[]
    x=50
    y=50
    i=0
    j=9
    #hurok számgombok létrehozásához
    while j>=0:
            arrf.append(Point(x,y))
            arrt.append(Point(x+50,y+50))
            btn=Rectangle(Point(x,y),Point(x+50,y+50))
            btn.setFill('white')
            btn.draw(workArea)
            num = Text(Point(x+25,y+25),str(j))
            num.setFace('helvetica')#stílus beállítás
            num.setStyle('bold italic')
            num.setTextColor("blue") #szín beállítás
            num.draw(workArea)
            x=x+55
            j=j-1
            i=i+1
            if (i==3):       
                x=50
                y=y+55
                i=0
    ops=['+','-','*','/','=']
    j=0
    #hurok kezelőgombok létrehozásához
    while j<len(ops):
            arrf.append(Point(x,y))
            arrt.append(Point(x+50,y+50))
            btn=Rectangle(Point(x,y),Point(x+50,y+50))
            btn.setFill('white')
            btn.draw(workArea)
            num = Text(Point(x+25,y+25),str(ops[j]))
            num.setFace('helvetica')#Stílus
            num.setStyle('bold italic')
            num.setSize(24)
            num.setTextColor("red") #szín
            num.draw(workArea)
            x=x+55
            j=j+1
            i=i+1
            if (i==3):       
                x=50
                y=y+55
                i=0
    #hozzon létre Törlés gombot         
    btn=Rectangle(Point(192,10),Point(222,40))
    btn.setFill('green')
    btn.draw(workArea)
    arrf.append(Point(192,10))
    arrt.append(Point(222,40))
    num = Text(Point(192+15,10+15),'C')
    num.setFace('helvetica')#stílus
    num.setStyle('bold italic')
    num.setTextColor("white") #szín
    num.draw(workArea)
    
    numv=""
    clk=True
    #hurok, hogy ellenőrizze a koordináták tartományát, ahol a felhasználó kattintott
    while clk:
        ch=workArea.getMouse()
        if (ch.x >arrf[0].x  and ch.x <arrt[0].x and ch.y >arrf[0].y  and ch.y<arrt[0].y):
            numv=numv+"9"
        if (ch.x >arrf[1].x  and ch.x <arrt[1].x and ch.y >arrf[1].y  and ch.y<arrt[1].y):
            numv=numv+"8"
        if (ch.x >arrf[2].x  and ch.x <arrt[2].x and ch.y >arrf[2].y  and ch.y<arrt[2].y):
            numv=numv+"7"
        if (ch.x >arrf[3].x  and ch.x <arrt[3].x and ch.y >arrf[3].y  and ch.y<arrt[3].y):
            numv=numv+"6"
        if (ch.x >arrf[4].x  and ch.x <arrt[4].x and ch.y >arrf[4].y  and ch.y<arrt[4].y):
            numv=numv+"5"
        if (ch.x >arrf[5].x  and ch.x <arrt[5].x and ch.y >arrf[5].y  and ch.y<arrt[5].y):
            numv=numv+"4"
        if (ch.x >arrf[6].x  and ch.x <arrt[6].x and ch.y >arrf[6].y  and ch.y<arrt[6].y):
            numv=numv+"3"
        if (ch.x >arrf[7].x  and ch.x <arrt[7].x and ch.y >arrf[7].y  and ch.y<arrt[7].y):
            numv=numv+"2"
        if (ch.x >arrf[8].x  and ch.x <arrt[8].x and ch.y >arrf[8].y  and ch.y<arrt[8].y):
            numv=numv+"1"
        if (ch.x >arrf[9].x  and ch.x <arrt[9].x and ch.y >arrf[9].y  and ch.y<arrt[9].y):
            numv=numv+"0"
        if (ch.x >arrf[10].x  and ch.x <arrt[10].x and ch.y >arrf[10].y  and ch.y<arrt[10].y):
            numv=numv+"+"
        if (ch.x >arrf[11].x  and ch.x <arrt[11].x and ch.y >arrf[11].y  and ch.y<arrt[11].y):
            numv=numv+"-"
        if (ch.x >arrf[12].x  and ch.x <arrt[12].x and ch.y >arrf[12].y  and ch.y<arrt[12].y):
            numv=numv+"*"
        if (ch.x >arrf[13].x  and ch.x <arrt[13].x and ch.y >arrf[13].y  and ch.y<arrt[13].y):
            numv=numv+"/"
        if (ch.x >arrf[14].x  and ch.x <arrt[14].x and ch.y >arrf[14].y  and ch.y<arrt[14].y):
            #Értékelje és jelenítse meg a kifejezést
            num.undraw()
            num = Text(Point(150-len(str(numv)),25),str(eval(numv)))
            num.draw(workArea)
            numv=str(eval(numv))
            continue
        if (ch.x >arrf[15].x  and ch.x <arrt[15].x and ch.y >arrf[15].y  and ch.y<arrt[15].y):
            numv="    "
        if (ch.x >249):
            break
        calexp=Rectangle(Point(50,10),Point(190,40))
        calexp.setFill("yellow")
        calexp.draw(workArea)
        num = Text(Point(150-len(str(numv)),25),str(numv))
        num.draw(workArea)
            
main()  
----------------------------------------  

Az eredmény grafikája



Nincsenek megjegyzések:

Megjegyzés küldése