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()
3 Réponses :
Peut-être que ceci:
Merci. Toute autre chose nécessaire?
vous pouvez utiliser
et définir la fonction avec (voir https://stackoverflow.com/a/43920993/12141765 et HTTTPS://Stackoverflow.com/a/16996475/12141765 pour des réponses détaillées) P> root.bind ('
root.bind ('<< backspace>', espace de fonctionnement) code> p>
événement code> comme argument: p>
DEF FunctionTurn (événement):
#votre code pour le retour ici
Def FunctionBackspace (événement):
#votre code pour backspace ici code> p>
Lorsque vous définissez la fonction que vous appelez avec BackSpace (dans votre cas, il semble être la fonction clear_backspace code>), vous devez mettre
événement code> 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 code>
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)) code> 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
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é alors j'ai fait le bouton. BTW La grille de bouton que j'ai utilisé n'a pas l'air le meilleur p>