Se connecter

Informatique

Programmation

Sujet : Problème programme python
1
TheMisterZiani
Niveau 1
19 janvier 2020 à 20:20:23

Salut à tous !

J'essaie de programmer une calculatrice sur python pour m'initier à tkinter et je bloque depuis un bon moment... Je ne sais pas où ! Ci-dessous le code avec une ou plusieures erreurs que je ne vois pas... Je pense quand même que ça bloque au niveau des boutons avec "command", j'ai peut être pas très bien compris comment ça marchait
Je ne suis qu'à l'étape où l'utilisateur entre des chiffres qui serviront plus tard au calcul et ces derniers s'affichent sur l'écran au fur et à mesure qu'il écrit
Je tiens juste à dire que j'ai mis une classe interface, une fonction __init__ et beaucoup de self parce que j'ai vu ça dans un autre programme qui marchait même si je n'ai pas très bien compris leur utilité...

from tkinter import *

vc=0

class Interface(Frame):

def __init__(self, fenetre, **kwargs):

Frame.__init__(self, fenetre, width=768, height=576,**kwargs)
self.pack(fill=BOTH)

self.champ_label = Label(fenetre, text = "CALCULATRICE", fg="red")
self.champ_label.pack()

self.champ_label = Label(fenetre, text="Entrez ci-dessous le calcul que vous souhaitez effectuer")
self.champ_label.pack()

self.lignedecommande = Label(fenetre, fg= "blue",text=vc)
self.lignedecommande.pack(fill = BOTH)

self.bouton_un = Button(fenetre, text="1", command = modifvariable(1))
self.bouton_un.pack(side = "top", fill = X)

self.bouton_deux = Button(fenetre, text="2", command = self.modifvariable(2))
self.bouton_deux.pack(side = "top", fill = X)

self.bouton_trois = Button(fenetre, text="3", command = self.modifvariable(3))
self.bouton_trois.pack(side = "top", fill = X)

self.bouton_quatre = Button(fenetre, text="4", command = self.modifvariable(4))
self.bouton_quatre.pack(side = "top", fill = X)

self.bouton_cinq = Button(fenetre, text="5", command = self.modifvariable(5))
self.bouton_cinq.pack(side = "top", fill = X)

self.bouton_six = Button(fenetre, text="6", command = self.modifvariable(6))
self.bouton_six.pack(side = "top", fill = X)

self.bouton_sept = Button(fenetre, text="7", command = self.modifvariable(7))
self.bouton_sept.pack(side = "top", fill = X)

self.bouton_huit = Button(fenetre, text="8", command = self.modifvariable(8))
self.bouton_huit.pack(side = "top", fill = X)

self.bouton_neuf = Button(fenetre, text="9", command = self.modifvariable(9))
self.bouton_neuf.pack(side = "top", fill = X)

self.bouton_plus = Button(fenetre, text="+")
self.bouton_plus.pack(side = "top", fill = X)

self.bouton_moins = Button(fenetre, text="-")
self.bouton_moins.pack(side = "top", fill = X)

self.bouton_diviser = Button(fenetre, text="÷")
self.bouton_diviser.pack(side = "top", fill = X)

self.bouton_multiplier = Button(fenetre, text="x")
self.bouton_multiplier.pack(side = "top", fill = X)

self.bouton_egal = Button(fenetre, text="=")
self.bouton_egal.pack(side = "top", fill = X)

def modifvariable (valeur):
global vc
vc += valeur

fenetre = Tk()
interface = Interface(fenetre)
interface.mainloop()
interface.destroy()

cybevil
Niveau 17
19 janvier 2020 à 21:20:57

Balise please...

<code></code>

#Mon programme
//...
Shiba_the_Inu
Niveau 60
19 janvier 2020 à 22:45:20

Je tiens juste à dire que j'ai mis une classe interface, une fonction __init__ et beaucoup de self parce que j'ai vu ça dans un autre programme qui marchait même si je n'ai pas très bien compris leur utilité...

Entre nous, ne fais jamais ça en programmation, surtout si tu peux l'éviter.
La programmation nécessite de la rigueur, la moindre erreur peut bloquer le programme, ou change complètement son fonctionnement car l'ordinateur ne corrigera pas pour toi ton code.

Si tu ne comprends pas quelque chose, expérimente le jusqu'à le comprendre, mais vaut mieux faire quelque chose de simple mais plus long et moins optimisé que tu comprends, qu'utiliser des choses que tu ne comprends pas. Ce sera plus sûr si tu agrandis ton programme, et au pire tu pourras toujours revenir de temps à autres pour améliorer et alléger certaines partie de ton code.

Je connais pas le python, mais ça ressemble à l'équivalent this de javascript, si c'est le cas ça se réfère à l'objet/classe qui contient l'élément
.machin
Donc si par exemple tu as une classe en javascript :
class_de_base
this.x = valeur;

et que tu fais des
class_A = new class_de_base
this.x =5

class_B = new class_de_base
this.x = 10;

si t'as une fonction qui fait
this.x += 5;

si tu fais passer ta classe A son x vaudra 10, si tu fais passer ta classe B, son x à elle vaudra 15.
En gros ça t'évites d'écrire
class_A.x
et/ou
class_B.x (et toutes les autres classes créées par la modèle class_de_base), ça t'automatise l'action. Ça éviter aussi de jouer sur des variables globales, et rend ton code plus flexible. Chaque nouvelle itération de cette même classe pouvant utiliser directement les mêmes fonctions.

1
Sujet : Problème programme python
News culture
La Planète des Singes : Le Nouveau Royaume - la révolution simienne est en marche !
   Retour haut de page
Consulter la version web de cette page