-1
votes

Comment puis-je implémenter une backpace et une fonction de fonction du clavier dans ma calculatrice?

J'utilise Python Tkinter 3.7 pour faire ma calculatrice d'interface graphique. Pour mon évaluation, je dois implémenter des touches de fonction de clavier qui saisiront également des chiffres et un bouton de retour arrière qui supprime le dernier chiffre ou l'opérateur entré, mais je n'ai pas pu comprendre comment faire une liaison pour ajouter une liaison et une backpace dans Tkinter. J'ai ajouté une annotation pour montrer comment je suis allé avec cela.

def cb(bs):           #cb=click on btn, bs=btn stuff
    global bd         # bd = stores & accum rcvd btn data
    bd=bd+str(bs) # bd=itself+the new bs(btn stuff)
    tv.set(bd)        # at some point clear out bd

def klr():
    global bd    # the accumulator of all btn data sent to cb()
    bd=''           # set bd to nothing
    tv.set(bd)   # tv var is bound to the text box: 'textvariable'

def eqf():
    global bd
    bd=eval(bd)
    tv.set(bd)
    bd=''

root = Tk()
root.title("Me Calculator")
tv=StringVar()
global bd    # bd = will store accumulated button data
bd=''           # bd = initially set to nothing



# textbox variable: tb
tb = Entry(root,font=('arial',18,'bold'),
           textvariable=tv,
           bd=15,
           insertwidth=3,
           bg='lightblue',
           justify='right').grid(columnspan=4)

tv.set('0.0')


# buttons section
btn7=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='7',
            command=lambda:cb(7)).grid(row=1,column=0)
btn8=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='8',
            command=lambda:cb(8)).grid(row=1,column=1)
btn9=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='9',
            command=lambda:cb(9)).grid(row=1,column=2)
divbtn=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='/',
    command=lambda:cb('/')).grid(row=1,column=3)
####
btn4=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='4',
            command=lambda:cb(4)).grid(row=2,column=0)
btn5=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='5',
            command=lambda:cb(5)).grid(row=2,column=1)
btn6=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='6',
            command=lambda:cb(6)).grid(row=2,column=2)
mulbtn=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='*',
            command=lambda:cb('*')).grid(row=2,column=3)

######




btn1=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='1',
            command=lambda:cb(1)).grid(row=3,column=0)
btn2=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='2',
            command=lambda:cb(2)).grid(row=3,column=1)
btn3=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='3',
            command=lambda:cb(3)).grid(row=3,column=2)
subtn=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='-',
            command=lambda:cb('-')).grid(row=3,column=3)


btn0=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='0',
            command=lambda:cb(0)).grid(row=4,column=0)
decbtn=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='.',
            command=lambda:cb('.')).grid(row=4,column=1)
addbtn=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='+',
            command=lambda:cb('+')).grid(row=4,column=2)

eqbtn=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='=',
            command=lambda:eqf()).grid(row=4,column=3)

klrbtn=Button(root,padx=5,bd=8,
            fg="black",font=('arial',24,'bold'),
            text='Clear',
            command=lambda:klr()).grid(row=4,column=4)
root.mainloop()


0 commentaires

3 Réponses :


0
votes

Peut-être que ceci: xxx


1 commentaires

Merci. Toute autre chose nécessaire?



0
votes

vous pouvez utiliser root.bind ('', fonctionReturn) et root.bind ('<< backspace>', espace de fonctionnement)

et définir la fonction avec événement comme argument:

DEF FunctionTurn (événement): #votre code pour le retour ici Def FunctionBackspace (événement): #votre code pour backspace ici

(voir https://stackoverflow.com/a/43920993/12141765 et HTTTPS://Stackoverflow.com/a/16996475/12141765 pour des réponses détaillées)


3 commentaires

Lorsque vous définissez la fonction que vous appelez avec BackSpace (dans votre cas, il semble être la fonction clear_backspace ), vous devez mettre événement dans sa définition. Il devrait s'agir de quelque chose comme ceci: def Clear_backspace (événement): #votre code pour arrière-plan ici


Votre bouton Appuyez sur la fonction de votre bouton nécessite un argument que vous avez défini comme num. root.bind ('<1>', événement Lambda: bouton_press (1)) fonctionne bien dans votre code.


Voyant que vous utilisiez beaucoup de variables globales, vous devriez envisager de définir vos fonctions dans une classe (en évitant les variables globales): Stackoverflow.com/a / 58171862/12141765



0
votes

Je viens de définir une fonction arrière sous clair qui utilise STR [: - 1] -1 est juste la fin de la STR car elle commence par le côté opposé xxx

alors j'ai fait le bouton. BTW La grille de bouton que j'ai utilisé n'a pas l'air le meilleur xxx


0 commentaires