Neutraliser l'utilisation d'un "Button" après l'avoir valider une fois
Résolu
cvan85
Messages postés
59
Statut
Membre
-
Phil_1857 Messages postés 1956 Statut Membre -
Phil_1857 Messages postés 1956 Statut Membre -
Bonjour,
Je n'arrive pas à trouver la syntaxe exacte pour réaliser le contrôle suivant :
Ne pas autoriser une seconde fois l'utilisation d'un bouton.
J'ai tenté plusieurs syntaxes trouver dans la littérature en ligne mais j'ai une erreur à chaque fois.
En attachement, la création du bouton dans le main et dans la procédure la tentative (infructueuse) de désactivation.
Merci de votre coup de main.
Claude
A l'exécution j'ai l'erreur suivante : AttributeError: 'NoneType' object has no attribute 'config'
Même résultat avec la ligne mise en commentaire ds la proc.
Je n'arrive pas à trouver la syntaxe exacte pour réaliser le contrôle suivant :
Ne pas autoriser une seconde fois l'utilisation d'un bouton.
J'ai tenté plusieurs syntaxes trouver dans la littérature en ligne mais j'ai une erreur à chaque fois.
En attachement, la création du bouton dans le main et dans la procédure la tentative (infructueuse) de désactivation.
Merci de votre coup de main.
Claude
Button(can_gen, text='Démarrer\nune partie',bg='#FFE4C4',fg='red',command = lambda : lancement(mat)).place(x=10, y= 370)
def lancement(matr):
global valid
palette.clear
#valid['state'] = DISABLED
valid.config(state = DISABLED)
A l'exécution j'ai l'erreur suivante : AttributeError: 'NoneType' object has no attribute 'config'
Même résultat avec la ligne mise en commentaire ds la proc.
A voir également:
- Neutraliser l'utilisation d'un "Button" après l'avoir valider une fois
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Sonne une fois et messagerie - Forum Samsung
- Signe fois clavier iphone ✓ - Forum Word
- Paiement 4 fois cdiscount impossible ✓ - Forum Consommation & Internet
6 réponses
J'ai essayé ça et ca marche:
pourquoi ca ne marche pas avec le place en fin de button, ne me demande pas pourquoi ...
lanc = Button(can_gen, text='Démarrer\nune partie',bg='#FFE4C4',fg='red',command = lambda : lancement(mat)) lanc.place(x=10, y= 370)
pourquoi ca ne marche pas avec le place en fin de button, ne me demande pas pourquoi ...
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour,
à quoi correspond la variable
nous montres-tu tout ton code?
à quoi correspond la variable
valid?
nous montres-tu tout ton code?
Autant pour moi, je n'ai pas posté les bonnes lignes de code (pb de version)
Désolé.
Voilà les bonnes lignes.
Ds le prog principal:
Ds la proc.
Ds les 2 cas(ligne active ou ligne commentée ds la proc même erreur :
Claude
Désolé.
Voilà les bonnes lignes.
Ds le prog principal:
lanc = Button(can_gen, text='Démarrer\nune partie',bg='#FFE4C4',fg='red',command = lambda : lancement(mat)).place(x=10, y= 370)
Ds la proc.
def lancement(matr):
global lanc
palette.clear
lanc['state'] = DISABLED
#lanc.config(state = DISABLED)
Ds les 2 cas(ligne active ou ligne commentée ds la proc même erreur :
File "/Users/..././PYTHON/prog/AZ_V4.py", line 34, in lancement
lanc['state'] = DISABLED
TypeError: 'NoneType' object does not support item assignment
Claude
Bonsoir Claude,
ca a l'air OK
tu applique bien le 'state' au bouton identifié par la variable lanc
Mais l'erreur dit que lanc est de type NoneType
Il faudrait voir dans quel ordre tu as mis tout ça, donc le code complet ....
ca a l'air OK
tu applique bien le 'state' au bouton identifié par la variable lanc
Mais l'erreur dit que lanc est de type NoneType
Il faudrait voir dans quel ordre tu as mis tout ça, donc le code complet ....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonsoir Phil,
Merci pour ton retour.
Voilà le code complet.
Merci pour ton retour.
Voilà le code complet.
#!/usr/bin/env python3.9
#######################
# #
# Jeu AZ V 4.0 #
# #
#######################
#import pdb; pdb.set_trace()
from tkinter import *
import random
import time
###### Définition des fonctions ##############
def aff_widg(canva):
for i in range(5):
for j in range(5):
canva.create_rectangle((40*(i+1),40*(j+1)),((40*(i+1)+40),40*(j+1)+40))
#def maj_palette(co):
#########
# mettre à jour le dico par +1 sur couleur tirée
def sel_coul():
ind=random.randint(1,7)
coul=choix[ind-1]
palette[coul] +=1
return coul
####Début de partie
def lancement(matr):
global lanc
palette.clear
lanc['state'] = DISABLED
#lanc.config(state = DISABLED)
for c in range(7):
palette[choix[c-1]] = 0
for i in range(5):
couleur=sel_coul()
can_gen.create_rectangle(((40*(i+1),40),((40*(i+1)+40),40+40)), fill=couleur,width=2, outline='black')
lig_courant[i]=couleur
matr[0]=lig_courant
fd.write(lig_courant[0]+lig_courant[1]+lig_courant[2]+lig_courant[3]+lig_courant[4])
Label(can_gen, text= "Pour chaque ligne supplémentaire\n cochez 2 cases et validez",bg='#FEFEE2',fg='blue').place(x=40, y= 310)
def autre_tirage(matrice):
global lig_courant
global ind_prec
nb_case = 0
if (r_v_c1.get()):
nb_case=nb_case + 1
if (r_v_c2.get()):
nb_case=nb_case + 1
if (r_v_c3.get()):
nb_case=nb_case + 1
if (r_v_c4.get()):
nb_case=nb_case + 1
if (r_v_c5.get()):
nb_case=nb_case + 1
if nb_case != 2:
Label(can_gen, text= "Attention ne cochez que 2 cases! " ,bg='#FEFEE2',fg='red').place(x=40, y= 310)
r_v_c1.set(False)
r_v_c2.set(False)
r_v_c3.set(False)
r_v_c4.set(False)
r_v_c5.set(False)
else:
if(matrice[1][0]=='vide'):
lig=2
ind_prec=0
elif (matrice[2][0]=='vide'):
lig=3
ind_prec=1
elif (matrice[3][0]=='vide'):
lig=4
ind_prec=2
elif (matrice[4][0]=='vide'):
lig=5
ind_prec=3
if (r_v_c1.get()):
couleur=sel_coul()
col=1
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=couleur,width=2, outline='black')
lig_courant[0]=couleur
r_v_c1.set(False)
else:
col=1
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=matrice[ind_prec][0],width=2, outline='black')
lig_courant[0]=matrice[ind_prec][0]
if (r_v_c2.get()):
couleur=sel_coul()
col=2
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=couleur,width=2, outline='black')
lig_courant[1]=couleur
r_v_c2.set(False)
else:
col=2
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=matrice[ind_prec][1],width=2, outline='black')
lig_courant[1]=matrice[ind_prec][1]
if (r_v_c3.get()):
couleur=sel_coul()
col=3
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=couleur,width=2, outline='black')
lig_courant[2]=couleur
r_v_c3.set(False)
else:
col=3
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=matrice[ind_prec][2],width=2, outline='black')
lig_courant[2]=matrice[ind_prec][2]
if (r_v_c4.get()):
couleur=sel_coul()
col=4
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=couleur,width=2, outline='black')
lig_courant[3]=couleur
r_v_c4.set(False)
else:
col=4
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=matrice[ind_prec][3],width=2, outline='black')
lig_courant[3]=matrice[ind_prec][3]
if (r_v_c5.get()):
couleur=sel_coul()
col=5
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=couleur,width=2, outline='black')
lig_courant[4]=couleur
r_v_c5.set(False)
else:
col=5
can_gen.create_rectangle(((40*(col),40*(lig)),((40*(col)+40),40*(lig)+40)), fill=matrice[ind_prec][4],width=2, outline='black')
lig_courant[4]=matrice[ind_prec][4]
ind_cour=ind_prec + 1
matrice[ind_cour]=lig_courant
fd.write(lig_courant[0]+lig_courant[1]+lig_courant[2]+lig_courant[3]+lig_courant[4])
def rien():
return 1
####### Programme principal ######################
# Définitions des variables globales
choix = ['blue','green','red','yellow','purple','pink','white']
ind_prec = 0
palette = {}
lig_courant =['vide','vide','vide','vide','vide']
mat = [['vide','vide','vide','vide','vide'],['vide','vide','vide','vide','vide'],['vide','vide','vide','vide','vide'],['vide','vide','vide','vide','vide'],['vide','vide','vide','vide','vide']]
####### Début du programme principal #############
fd=open('mat_file','w')
fen1=Tk()
fen1.title("Jeu AZ V4.0")
fen1.geometry("420x470")
can_gen=Canvas(fen1, width=360, height=410, bg ="#FEFEE2")
can_gen.place(x=30,y=30)
aff_widg(can_gen)
r_v_c1 = BooleanVar(value=False)
r_v_c2 = BooleanVar(value=False)
r_v_c3 = BooleanVar(value=False)
r_v_c4 = BooleanVar(value=False)
r_v_c5 = BooleanVar(value=False)
c1 = Checkbutton(can_gen, text = "1", height = 2, width = 5,bg ="#FEFEE2",variable= r_v_c1).place(x=40,y=280)
c2 = Checkbutton(can_gen, text = "2", height = 2, width = 5,bg ="#FEFEE2",variable= r_v_c2).place(x=80,y=280)
c3 = Checkbutton(can_gen, text = "3", height = 2, width = 5,bg ="#FEFEE2",variable= r_v_c3).place(x=120,y=280)
c4 = Checkbutton(can_gen, text = "4", height = 2, width = 5,bg ="#FEFEE2",variable= r_v_c4).place(x=160,y=280)
c5 = Checkbutton(can_gen, text = "5", height = 2, width = 5,bg ="#FEFEE2",variable= r_v_c5).place(x=200,y=280)
valid = Button(can_gen, text = "Validez", height = 2, width = 7,bg ="#FEFEE2",fg='red',command = lambda: autre_tirage(mat)).place(x=295,y=280)
lanc = Button(can_gen, text='Démarrer\nune partie',bg='#FFE4C4',fg='red',command = lambda : lancement(mat)).place(x=10, y= 370)
Button(can_gen, text='FIN \nde partie',bg='#AD4F09',fg='red', command = fen1.quit).place(x=250,y=370)
####### Boucle d'attente d'évènements ##############
fen1.mainloop()
####### Effacement fenêtre - Sortie programme ######
fd.close
fen1.destroy()
####################################################
lanc est ce que retourne la fonction Button
plac est ce que retourne la fonction place
on voudrait sinon écrire
C'est bien ça
J'ai fait des tests ensuite pour imprimer les types des valeurs de retour
Je ne suis jamais tombé sur le problème car je fait toujours ça en 2 instructions :
b1=Button() b1.place()