.insert / .delete tkinter
Bonjour,
J'ai besoin d'aide : je dois créer ma propre calculatrice en python avec
Voici mon programme:
quand je lance mon programme ma calculatrice s'affiche mais quand je veux cliquer sur un bouton on me dit :
Je ne comprends pas d'où vient le souci. Si quelqu'un a le temps de m'aider se serait super :-)
Merci d'avance et bonne journée
modération : Pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
J'ai besoin d'aide : je dois créer ma propre calculatrice en python avec
tkinter. Le problème, c'est que mes fonctions pour activer les boutons ne marchent pas (je n'ai pas le droit d'utiliser autre chose que des fonctions).
Voici mon programme:
####################################################################### from tkinter import * # Tkinter #---------- # FENETRE : #---------- fen = Tk() # Création de a fenêtr 1e fen.geometry("200x240") # Définition de la fenêtre fen.title("Calculatrice v1.0") # Titre de la calculatrice fen["bg"]= "#ffddbd" # Coleur de la fenêtre fen["relief"] = "raised" # Profondeur de la fenêtre #------------ #FONCTIONS : #------------ global operateur def bouton_click(nbre): operateur="" operateur=operateur+str(nbre) Ecran.insert(10,operateur) def bouton_clear(): Ecran.delete(0,10000) def bouton_egal(): calcul=Ecran.get() Ecran.delete(0,10000) Ecran.insert(100000,eval(calcul)) operateur="" #------------ # PROGRAMME : #------------ # // Ecran calculatrice // Ecran=Entry(fen, width=28, bg ="black", fg="white", relief=SUNKEN, bd=5).place(x=9, y=8) # // Bouttons // B1 = Button(fen, text="1", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(1))) B1.place(x=10, y=40) # Boutton 1 B2 = Button(fen, text="2", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(2))) B2.place(x=50, y=40) # Boutton 2 B3 = Button(fen, text="3", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(3))) B3.place(x=90, y=40) # Boutton 3 B4 = Button(fen, text="4", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(4))) B4.place(x=10, y=90) # Boutton 4 B5 = Button(fen, text="5", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(5))) B5.place(x=50, y=90) # Boutton 5 B6 = Button(fen, text="6", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(6))) B6.place(x=90, y=90) # Boutton 6 B7 = Button(fen, text="7", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(7))) B7.place(x=10, y=140) # Boutton 7 B8 = Button(fen, text="8", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(8))) B8.place(x=50, y=140) # Boutton 8 B9 = Button(fen, text="9", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(9))) B9.place(x=90, y=140) # Boutton 9 BC = Button(fen, text="C", width=3, height=2, bg="red", fg="black", relief=RIDGE, command=bouton_clear) BC.place(x=10, y=190) # Boutton C (Clear) B0 = Button(fen, text="0", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(0))) B0.place(x=50, y=190) # Boutton 0 BF = Button(fen, text=".", width=3, height=2, bg="pink", fg="black", command=bouton_egal) BF.place(x=90, y=190) # Boutton = (égale) BP = Button(fen, text="+", width=4, height=2, bg="violet", fg="black", relief=GROOVE) BP.place(x=150, y=40) # Boutton + (addition) BS = Button(fen, text="-", width=4, height=2, bg="violet", fg="black", relief=GROOVE) BS.place(x=150, y=80) # Boutton - (soustacrtion) BD = Button(fen, text="/", width=4, height=2, bg="violet", fg="black", relief=GROOVE) BD.place(x=150, y=120) # Boutton / (division) BM = Button(fen, text="X", width=4, height=2, bg="violet", fg="black", relief=GROOVE) BM.place(x=150, y=160) # Boutton X (multiplication) BE = Button(fen, text="=", width=4, height=1, bg="blue", fg="white", relief=RIDGE) BE.place(x=150, y=205) # Button = (égale) fen.mainloop() #######################################################################
quand je lance mon programme ma calculatrice s'affiche mais quand je veux cliquer sur un bouton on me dit :
#######################################################################
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Elève\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
File "C:\Users\Elève\AppData\Local\Programs\Python\Python39\calculatrice tkinter.py", line 47, in <lambda>
B3 = Button(fen, text="3", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(3)))
File "C:\Users\Elève\AppData\Local\Programs\Python\Python39\calculatrice tkinter.py", line 22, in bouton_click
Ecran.insert(10,operateur)
AttributeError: 'NoneType' object has no attribute 'insert'
#######################################################################
Je ne comprends pas d'où vient le souci. Si quelqu'un a le temps de m'aider se serait super :-)
Merci d'avance et bonne journée
modération : Pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
<> ▼permet d'appliquer au code, suivant une liste de valeurs, le format correspondant à sa nature.
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
A voir également:
- Tkinter .delete
- Hiberfil.sys delete - Guide
- Juste delete me - Guide
- *#9900# delete dumpstate/logcat ✓ - Forum Samsung
- Delete doctor - Télécharger - Divers Utilitaires
- Delete dumpstate/logcat en francais - Forum Samsung
3 réponses
Bonjour,
À mon avis, le souci, c'est que lorsque tu exécutes cette instruction,
A part ça, l'indentation étant importante en Python, il faut afficher ton code avec les balises de code:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ecran.insert(10, operateur) AttributeError: 'NoneType' object has no attribute 'insert'
À mon avis, le souci, c'est que lorsque tu exécutes cette instruction,
Ecrann'est pas connu (il est égal à
None, d'après le message d'erreur).
A part ça, l'indentation étant importante en Python, il faut afficher ton code avec les balises de code:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Bonjour,
Merci de soigner l'orthographe, la plupart des navigateurs ont un correcteur orthographique.
Il faut passer
... pour en disposer dans la fonction appelée (ici
Autre remarques :
Bonne chance
Merci de soigner l'orthographe, la plupart des navigateurs ont un correcteur orthographique.
Il faut passer
Ecranen paramètre de tes callbacks :
B0 = Button( fen, text="0", width=3, height=2, bg="pink", fg="black", command=(lambda: bouton_click(0, Ecran)) )
... pour en disposer dans la fonction appelée (ici
bouton_click) :
def bouton_click(nbre, ecran): operateur = operateur + str(nbre) ecran.insert(10, operateur)
Autre remarques :
- pour suivre les conventions python,
Ecran
devrait s'appelerecran
(plus généralement les noms de variables sont en minuscules, les constantes en majuscules, et les noms de classe en camel case); - évite le mot clé
global
, généralement c'est une mauvaise idée ;
Bonne chance
Bonjour Mamie,
évite le mot clé global, généralement c'est une mauvaise idée
C'est vrai, mais peut on, pour éviter ça, utiliser ce genre de code ? :
évite le mot clé global, généralement c'est une mauvaise idée
C'est vrai, mais peut on, pour éviter ça, utiliser ce genre de code ? :
class G(): ''' classe pour variables globales ''' toto = 0 def une_fonction(): G.toto = 10 .....
Dans le cas présent, je pense que le plus simple serait de créer une classe (disons
Voici à quoi pourrait ressembler le code (je n'ai fait qu'un bouton) :
Calculatrice) dans laquelle on stocke les pointeurs sur les différents boutons et l'attribut de classe
operator.
Voici à quoi pourrait ressembler le code (je n'ai fait qu'un bouton) :
from tkinter import * class Calculatrice(Tk): def __init__(self): super().__init__() self.geometry("200x240") # Définition de la fenêtre self.title("Calculatrice v1.0") # Titre de la calculatrice self["bg"]= "#ffddbd" # Couleur de la fenêtre self["relief"] = "raised" # Profondeur de la fenêtre self.operator = "" self.ecran = Entry(self, width=28, bg ="black", fg="white", relief=SUNKEN, bd=5) self.ecran.place(x=9, y=8) self.b1 = Button( self, text="1", width=3, height=2, bg="pink", fg="black", command=(lambda: self.bouton_click(1)) ) self.b1.place(x=10, y=40) # Bouton 1 # ... def bouton_click(self, data): print("click %r %r" % (self.operator, data)) calculatrice = Calculatrice() calculatrice.mainloop()