Problème Evénement Python Tkinter

Résolu/Fermé
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023 - 19 avril 2021 à 09:41
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023 - 19 avril 2021 à 16:42
Bonjour
J’ai écrit un bout de code ci-dessous pour expliquer mon problème.
Ce code-là fonctionne, mais je voudrais que le déplacement du bloc soit opéré non par le clic gauche du pavé numérique mais par l’appui sur une touche du clavier, par exemple la touche de la lettre H.

Mais si je remplace '<Button-1>' par ce qui est préconnisé à savoir ‘<KeyPress-H>’, le code ne fonctionne plus. J’ai essayé ‘<KeyPress_H>’, ‘<KeyPress-h>’, ‘<KeyPress_h>’ , ‘<KP-H>’, ‘<KP_H>’,
‘<KP-h>’, ‘<KP_h>’… Rien ne fonctionne. C’est pareil évidemment pour n’importe quelle touche de lettre ou de chiffre.

Quelqu’un peut-il m’expliquer ce que je fais mal ? Merci d’avance.

Code :


from tkinter import *

def dépl_gauche(event):
global x2, y2
x2 = x2-20
can.coords(bloc,x2,y2,x2+60,y2+10)

x2, y2 = 130, 260
fen = Tk()
can = Canvas(fen, bg = 'dark grey', width = 320, height = 320)
can.pack()
bloc = can.create_rectangle(x2,y2,x2+60,y2+10,outline = 'purple',fill = 'purple')
can.bind('<Button-1>',dépl_gauche)
fen.mainloop()

4 réponses

Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023
19 avril 2021 à 09:47
Les trois lignes sous "def dépl_gauche(event):" sont évidemment indentées.
0
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 235
Modifié le 19 avril 2021 à 10:26
bonjour, tu devrais remettre ton code avec 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
ce qui donne
def test():
    print('test')
#
test()
0
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023
19 avril 2021 à 10:38
OK merci.

Code :


from tkinter import *

def dépl_gauche(event):
    global x2, y2
    x2 = x2-20
    can.coords(bloc,x2,y2,x2+60,y2+10)

x2, y2 = 130, 260
fen = Tk()
can = Canvas(fen, bg = 'dark grey', width = 320, height = 320)
can.pack()
bloc = can.create_rectangle(x2,y2,x2+60,y2+10,outline = 'purple',fill = 'purple')
can.bind('<Button-1>',dépl_gauche)
fen.mainloop()
0
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 235
19 avril 2021 à 12:44
il faut :
can.focus_force()
can.bind("a",dépl_gauche) 


trouvé là : http://s15847115.domainepardefaut.fr/python/tkinter/event_clavier.html
0
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023
19 avril 2021 à 15:00
Merci beaucoup jee pee.
Cela résout largement mon problème !
A noter: si les indications données fonctionnent bien pour les lettres majuscules, minuscules, les chiffres, les flèches (N, S, W, E), entrée ou F1, cela ne fonctionne pas par exemple pour la touche espace...
Moi j'étais sur le lien d'aide Tkinker ci-dessous, mais à aucun moment ça ne parle du "focus_force()" et les codes de touches ne sont pas corrects ...??
http://tkinter.fdex.eu/doc/event.html
Merci à toi
0
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 235
Modifié le 19 avril 2021 à 15:41
voir : http://tkinter.fdex.eu/doc/uwm.html#focus_force donc il doit y avoir une autre façon de procéder plus légère

chez moi "<F1>" ou "<space>" fonctionnent
0
Nico_63 Messages postés 41 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 27 mai 2023 > jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024
19 avril 2021 à 16:42
Oui tu as raison, <space> fonctionne mais pas <Space> comme indiqué.
0