Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#26 25-02-2019 15:32:57

David5647
Membre
Distrib. : Debian Buster
Noyau : 4.17.0-3-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : cadrillage en python

Le meilleur conseil que je peux te donner là, c'est lire un tuto, te repencher sur ce qu'est une boucle, et tu prends du papier un crayon et tu suis ton programme.
Dans une premier temps, essaie de tracer des cordes uniquement.
Tu peux essayer de les tracer d'abord sans faire de boucle, tu écris la création de tes 6 lignes, ça marche aussi, t'es pas obligé de faire de boucle.
Puis, si tu veux faire quelque chose d'un peu mieux, t'essaie de voir la récurrence entre les lignes et tu fabriques une boucle.
tu peux partir de :

cordes = [0, 50, 100, 150, 200, 250]

pour des cordes espacées de 50.

Hors ligne

#27 25-02-2019 17:18:41

calixtus06
Membre
Distrib. : Librazik2
Noyau : Linux version 4.9.0-6-lzk-bl-amd64
(G)UI : mate
Inscription : 25-03-2016

Re : cadrillage en python

ok,

j'ai repris depuis le début mais je bloque sur le dessin des cordes . peux tu m'éclairer ?

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk

fen_generale=tk.Tk()

frettes=["1ère frette","2ème frette", "3ème frette", "4ème frette","5ème frette"]
cordes=["1ère corde", "2ème corde", "3ème corde","4ème corde","5ème corde", "6ème corde"]

longueur=400
largeur=200
x=0
y=0
x1=largeur
y1=longueur

manche_nu=tk.Canvas(fen_generale, height=longueur, width=largeur, bg="yellow")

for i in frettes:
  print (manche_nu.create_line (x,y+2,x1,y+2))
  y=y+80
 
for i in cordes:
  print (manche_nu.create_line (x+2,y,x+2, y1))
  x=x+10


manche_nu.pack()
tk.mainloop()


Il n'y a pas de mauvaises questions...

Hors ligne

#28 25-02-2019 18:13:57

David5647
Membre
Distrib. : Debian Buster
Noyau : 4.17.0-3-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : cadrillage en python

Commenté :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk

fen_generale=tk.Tk()

# Quel est l'interet d'une telle liste?
frettes=["1ère frette","2ème frette", "3ème frette", "4ème frette","5ème frette"]
cordes=["1ère corde", "2ème corde", "3ème corde","4ème corde","5ème corde", "6ème corde"]

longueur=400
largeur=200
x=0
y=0
x1=largeur
y1=longueur

manche_nu=tk.Canvas(fen_generale, height=longueur+200, width=largeur+200, bg="yellow")

for i in frettes: # i ne sert à rien, pourquoi ne pas se servir de for pour ajuster la vakeur de y directement?
  print (manche_nu.create_line(x,y+2,x1,y+2)) # il sert à quoi ce print???
  # tu renommerai x en x0, on comprendrai plus facilement qui varie ou non :
  # un nom pour les variables, un nom pour les constantes : voir la suite...
  y=y+80 # prend un papier et demande toi : quelles valeurs prendra y?

for i in cordes:
  # on commence avec y = 6*80=480 et j'ai l'impression que si y>y1 il ne veut
  # rien tracer, c'est ça mélanger variables et constantes, il faut réinitialiser y
  # avant la boucle.
  print (manche_nu.create_line(x+2,y,x+2, y1))
  x=x+10


manche_nu.pack()
tk.mainloop()
 



Ma version :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk

case = [0, 80, 160, 240, 320, 400] # si on veut 5 case, il faut faire 6 traits
corde = [0, 40, 80, 120, 160, 200]

longueur = 400
largeur = 200

fen = tk.Tk()

manche_nu = tk.Canvas(fen, height=longueur, width=largeur, bg = "yellow")

y0 = 0
y1 = longueur
for x in corde:
  manche_nu.create_line(x, y0, x, y1, fill="black")

x0 = 0
x1 = largeur
for y in case:
  manche_nu.create_line(x0, y, x1, y, fill="red")

manche_nu.pack()
fen.mainloop()
 

Hors ligne

#29 26-02-2019 12:09:50

calixtus06
Membre
Distrib. : Librazik2
Noyau : Linux version 4.9.0-6-lzk-bl-amd64
(G)UI : mate
Inscription : 25-03-2016

Re : cadrillage en python

Ayé , il me semble que là c'est plus clair,
prochaine étape mettre tout ça sous forme de classe ?

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk

fen_generale=tk.Tk()


#Pour moi c'est plus représentatif de ce dont je parle
#la frette est un "trait". La case est un espace. Du coup je préfère
#une liste de noms de frettes et une avec le nom des cordes.
#Peutêtre ai-je mal compris ?
#effectivement x et y resteront des entiers et non des chaînes dans les boucles for

frettes=[2,80,160, 240,320,400]
cordes=[2, 40, 80,120,160,200]

longueur=405
largeur=205
x0=0
x1=largeur
y0=0
y1=longueur


manche_nu=tk.Canvas(fen_generale, height=longueur, width=largeur, bg="yellow")

# x est un compteur et non une variable, c'est ça ?

for x in cordes:
  manche_nu.create_line (x,y0,x,y1)


for y in frettes:
  manche_nu.create_line (x0,y,x1,y)

manche_nu.pack()
tk.mainloop()

Dernière modification par calixtus06 (26-02-2019 13:19:20)


Il n'y a pas de mauvaises questions...

Hors ligne

#30 26-02-2019 15:38:49

David5647
Membre
Distrib. : Debian Buster
Noyau : 4.17.0-3-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : cadrillage en python

calixtus06 a écrit :

#Pour moi c'est plus représentatif de ce dont je parle
#la frette est un "trait". La case est un espace. Du coup je préfère
#une liste de noms de frettes et une avec le nom des cordes.
#Peutêtre ai-je mal compris ?

C'est toi qui persistais à utiliser la variable case pour tracer des traits, c'est un de tes codes que j'ai remodifié... big_smile
Donc, oui, frettes est plus adapté.

calixtus06 a écrit :

#effectivement x et y resteront des entiers et non des chaînes dans les boucles for

A quoi t'attendais tu?

calixtus06 a écrit :

# x est un compteur et non une variable, c'est ça ?


Je ne sais pas ce que tu entends pas compteur exactement,
Je définirai compteur ainsi: variable qui à chaque itération s'incrémente de 1
comme x n'augmente pas de 1 à chaque itération, ce n'est pas un compteur, mais c'est une variable
x énumère les valeurs stockées dans la liste cordes,
x a successivement la nature des éléments stockés dans cordes, peu importe la nature de ceux qui s'y trouvent
La boucle for et while, c'est peu ou prou là même chose. Si tu connais déjà les valeurs de x, c'est juste plus explicite d’utiliser la première.


J'ai noté cordes et la boucle for ainsi pour mettre en évidence le fonctionnement,
mais tu remarquera que si tu veux changer l'espace entre les cordes, il te faudra changer plusieurs valeurs

Tu peux tout mettre dans une classe si tu veux,
tu remarquera que si tu remets tout dans une boucle (et en adaptant un peu), tu peux tracer aussi plusieurs diagrammes.
Une classe apportera de la clarté.
Tu dois aussi créer une fonction pour afficher les notes.
Tu peux commencer par l'un ou par l'autre, cherche des tutos tu en trouvera de nombreux, plus exhaustifs que tout ce que je pourrais t'écrire ici

Dernière modification par David5647 (26-02-2019 16:04:54)

Hors ligne

#31 27-02-2019 23:13:39

calixtus06
Membre
Distrib. : Librazik2
Noyau : Linux version 4.9.0-6-lzk-bl-amd64
(G)UI : mate
Inscription : 25-03-2016

Re : cadrillage en python

Un grand merci !

Il n'y a pas de mauvaises questions...

Hors ligne

#32 02-03-2019 16:03:27

David5647
Membre
Distrib. : Debian Buster
Noyau : 4.17.0-3-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : cadrillage en python

Salut,
tu t'en sors avec tes classes?

J'ai un peu développé mon code et recyclé quelques bouts de programmes,
pour voir ce que ça donne, c'est par ici

Je sais pas si  tu arrivera à le lire facilement, j'ai essayé de bien le commenter
mais ça peut te donner une idée de structure, comment et quels objets regrouper dans des classes...

Hors ligne

#33 05-03-2019 08:19:14

calixtus06
Membre
Distrib. : Librazik2
Noyau : Linux version 4.9.0-6-lzk-bl-amd64
(G)UI : mate
Inscription : 25-03-2016

Re : cadrillage en python

Un grand merci pour ce boulot . Je vais m'y pencher aujourd'hui . A priori il faut rassembler plusieurs de tes programmes ?

Il n'y a pas de mauvaises questions...

Hors ligne

#34 05-03-2019 09:10:13

David5647
Membre
Distrib. : Debian Buster
Noyau : 4.17.0-3-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : cadrillage en python

Tu n'as besoin que de 3 fichiers :
   - le plus important : show_guitar_accord.py, qu'il faut exécuter avec python3, tout le code nécessaire est là!
   - listedesaccords.py qui contient la liste des accords que tu avais fourni, juste un peu modifiée pour la lire plus facilement avec python
   - guitare_parameter.py : quelques paramètres (dont géométriques) de la guitare   

Pas besoin de "rassembler", juste les garder dans le même dossier et lancer le premier dans lequel j'importe les accords et les paramètres en début de script.

woodenbackground.py n'est pas utilisé par défaut, il faut mettre à True l'option dans les paramètres si tu veux l'utiliser. Pas besoin de le regarder, c'est un vieux truc que j'avais programmé qui malgré ses 30 lignes est complètement incompréhensible par moi même. Il génère un fond style bois, juste de la cosmétique, juste parceque c'est amusant tongue .

essaie déjà de faire

python3 show_guitar_accords.py

Voir si il fonctionne délà big_smile

Pour l'utiliser, ça un peu changé depuis le screenshot, maintenant il faut juste cliquer sur un manche et un popup devrait apparaitre,
tu choisi l'accordage, l'accord et enfin sa variante et ça devrait s'afficher. (note : il n'y à que le premier et dernier accordage qui fonctionnent, les deux autres étaient vides dans le fichier que tu as fourni)

Dernière modification par David5647 (05-03-2019 09:16:51)

Hors ligne

Pied de page des forums