Question découpage de scripts en morceaux
amiga56
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
amiga56 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
amiga56 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J’ai un script qui commence à grandir pas mal(ce n'est pas terminé) et je me pose la question de le découper (il y avait déjà 4 fichiers : EssaiDeNotebook.py, Errors.py, style.css et EssaiDeNotebook.glade)
mon ficher se présente comme cela :
Je voudrais le découper en 2 parties (partie "def cs_bt_calc_clicked"), après quelques essais j'arrive miraculeusement à un ensemble fonctionnel mais je ne m'explique pas que ça marche !
Voici les 2 parties :
et loa seconde partie qui se nomme "VerifCoussinet.py"
pouvez vous m'expliquer la chose? , voire me faire des critiques !
J’ai un script qui commence à grandir pas mal(ce n'est pas terminé) et je me pose la question de le découper (il y avait déjà 4 fichiers : EssaiDeNotebook.py, Errors.py, style.css et EssaiDeNotebook.glade)
mon ficher se présente comme cela :
# import de la bibliothèque graphique import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk,Gdk import os, sys import Errors from math import * class EssaiDeNotebook: __gtype_name__ = "EssaiDeNotebook" def __init__(self): # en cas d'usage de PyInstaller pour créer un exe unique, il faut adapter le chemin du fichier glade if getattr(sys, 'frozen', False): wd = sys._MEIPASS print("bundle : path = ",wd) else: wd = os.getcwd() print("live : path = ",wd) file_path = os.path.join(wd,'EssaiDeNotebook.glade') style_provider = Gtk.CssProvider() css = open(wd+'\\'+'style.css', 'rb') css_data = css.read() css.close() style_provider.load_from_data(css_data) #path="{0}style.css".format(wd) #style_provider.load_from_file(path) interface = Gtk.Builder() interface.add_from_file(file_path) interface.connect_signals(self) window = interface.get_object("window") SC=Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) self.statusbar = interface.get_object('statusbar') self.notebook = interface.get_object("notebook1") self.on_notebook_switchpage(self.notebook, '', 0) # volet calcul de coussinet self.cs_effort= interface.get_object("cs_effort_radial") self.cs_dia = interface.get_object("cs_dia") self.cs_long = interface.get_object("cs_long") self.cs_freq = interface.get_object("cs_freq") self.cs_pression=interface.get_object("cs_label_p") self.cs_pv = interface.get_object("cs_label_pv") self.cs_vitesse = interface.get_object("cs_label_vitesse") self.cs_bouton= interface.get_object("cs_bt_calc") window.show_all() # Lien avec glade : notebook1 / signaux / GTKnoteBook/ switch-page -> on_notebook_switchpage def on_notebook_switchpage(self, notebook, page, page_num, data=None): self.tab = notebook.get_nth_page(page_num) self.label = notebook.get_tab_label(self.tab).get_label() print(self.label) self.message_id = self.statusbar.push(0, self.label) def cs_bt_calc_clicked(self,widget): erreur=0 N=self.cs_effort.get_text() if not Errors.is_numeric(N): Errors.MessageErreur(); erreur += 1 dia=self.cs_dia.get_text() if not Errors.is_numeric(dia): Errors.MessageErreur(); erreur += 1 else: if dia=="0": Errors.MessageErreurZero(); erreur=erreur+1 long = self.cs_long.get_text() if not Errors.is_numeric(long): Errors.MessageErreur(); erreur += 1 else: if long=="0": Errors.MessageErreurZero(); erreur=erreur+1 freq = self.cs_freq.get_text() if not Errors.is_numeric(freq): Errors.MessageErreur(); erreur += 1 if erreur<=0: pression = float(N)/(float(dia)*float(long)) vitesse = float(dia)*pi*float(freq)/60000 pv=pression*vitesse self.cs_vitesse.set_label(str(vitesse)) self.cs_pression.set_label(str(pression)) self.cs_pv.set_label(str(pv)) print("Effort =",N," - Diàmétre =",dia," - long =",long," - Freq=",freq) # Lien avec glade : windows / signaux / GtkWidget / widget / destroy -> destroy def destroy(self, widget): print("Au Revoir !") Gtk.main_quit() if __name__ == "__main__": app = EssaiDeNotebook() Gtk.main()
Je voudrais le découper en 2 parties (partie "def cs_bt_calc_clicked"), après quelques essais j'arrive miraculeusement à un ensemble fonctionnel mais je ne m'explique pas que ça marche !
Voici les 2 parties :
# import de la bibliothèque graphique import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gdk import os, sys import Errors import VerifCoussinet from math import * class EssaiDeNotebook: __gtype_name__ = "EssaiDeNotebook" def __init__(self): # en cas d'usage de PyInstaller pour créer un exe unique, il faut adapter le chemin du fichier glade if getattr(sys, 'frozen', False): wd = sys._MEIPASS print("bundle : path = ", wd) else: wd = os.getcwd() print("live : path = ", wd) file_path = os.path.join(wd, 'EssaiDeNotebook.glade') style_provider = Gtk.CssProvider() css = open(wd + '\\' + 'style.css', 'rb') css_data = css.read() css.close() style_provider.load_from_data(css_data) # path="{0}style.css".format(wd) # style_provider.load_from_file(path) interface = Gtk.Builder() interface.add_from_file(file_path) interface.connect_signals(self) window = interface.get_object("window") SC = Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) self.statusbar = interface.get_object('statusbar') self.notebook = interface.get_object("notebook1") self.on_notebook_switchpage(self.notebook, '', 0) # volet calcul de coussinet self.cs_effort = interface.get_object("cs_effort_radial") self.cs_dia = interface.get_object("cs_dia") self.cs_long = interface.get_object("cs_long") self.cs_freq = interface.get_object("cs_freq") self.cs_pression = interface.get_object("cs_label_p") self.cs_pv = interface.get_object("cs_label_pv") self.cs_vitesse = interface.get_object("cs_label_vitesse") self.cs_bouton = interface.get_object("cs_bt_calc") window.show_all() # Lien avec glade : notebook1 / signaux / GTKnoteBook/ switch-page -> on_notebook_switchpage def on_notebook_switchpage(self, notebook, page, page_num, data=None): self.tab = notebook.get_nth_page(page_num) self.label = notebook.get_tab_label(self.tab).get_label() print(self.label) self.message_id = self.statusbar.push(0, self.label) # lien avec glade : cs_bt_calc (bouton) / Signaux / GtkButton / clicked -> cs_bt_calc_clicked def cs_bt_calc_clicked(self, widget): VerifCoussinet.Calcul(self) # Lien avec glade : windows / signaux / GtkWidget / widget / destroy -> destroy def destroy(self, widget): print("Au Revoir !") Gtk.main_quit() if __name__ == "__main__": app = EssaiDeNotebook() Gtk.main()
et loa seconde partie qui se nomme "VerifCoussinet.py"
import gi import Errors from math import * def Calcul(self): erreur = 0 # collecte du contenu des champs de l'interface graphique N = self.cs_effort.get_text() dia = self.cs_dia.get_text() long = self.cs_long.get_text() freq = self.cs_freq.get_text() # vérifier que les champs sont numérique et pour certains, non nul if not Errors.is_numeric(N): Errors.MessageErreur(); erreur += 1 if not Errors.is_numeric(dia): Errors.MessageErreur(); erreur += 1 elif dia == "0": Errors.MessageErreurZero(); erreur += 1 if not Errors.is_numeric(long): Errors.MessageErreur(); erreur += 1 elif long == "0": Errors.MessageErreurZero(); erreur += 1 if not Errors.is_numeric(freq): Errors.MessageErreur(); erreur += 1 # si aucune erreur on peut éffectuer les calculs if erreur <= 0: pression = float(N) / (float(dia) * float(long)) vitesse = float(dia) * pi * float(freq) / 60000 pv = pression * vitesse # mise a jour des labels de l'interface graphique afin d'avoir l'affichage des résultats self.cs_vitesse.set_label(str(vitesse)) self.cs_pression.set_label(str(pression)) self.cs_pv.set_label(str(pv)) print("Effort =", N, " - Diàmétre =", dia, " - long =", long, " - Freq=", freq)
pouvez vous m'expliquer la chose? , voire me faire des critiques !
A voir également:
- Question découpage de scripts en morceaux
- Découpage photo instagram - Guide
- Couper un fichier audio en plusieurs morceaux - Guide
- Microsoft activation scripts (mas) - Accueil - Windows
- Comment couper une vidéo en plusieurs morceaux - Guide
- Téléchargez le fichier et modifiez-le avec le logiciel de montage vidéo de votre choix. supprimez les 3 moments avec le papillon : votre vidéo est donc fractionnée en 4 morceaux. dupliquez le premier morceau et placez la copie à la fin de la vidéo. déplacez le deuxième morceau à la fin de vidéo. recollez tous les morceaux pour ne pas laisser de blanc. à quelle seconde peut-on voir la bouteille encore entière ? ✓ - Forum Montage et acquisition vidéo
2 réponses
Bonjour,
Qu'est-ce qui t'étonnes ?
self contient l'instance de EssaiDeNotebook que tu passes en paramètre de VerifCoussinet.Calcul, donc la fonction Calcul peut travailler dessus comme s'il était à l'intérieur de ta classe, et par conséquent devient une méthode de ta classe.
Si cela te surprend, c'est que tu n'as pas bien compris à quoi sert le 1er argument des méthodes (self) dans les méthodes de classes en python.
Comme on ne sait pas ce que ton script est censé faire, en plus il faut bien connaître le module gtk, difficile d'émettre des critiques. On ne sait pas pourquoi tu veux placer une méthode de ta classe dans un autre module, une classe de même pas 100 lignes, c'est pas grand-chose niveau nombre de lignes d'une classe et encore moins d'un fichier py
Qu'est-ce qui t'étonnes ?
self contient l'instance de EssaiDeNotebook que tu passes en paramètre de VerifCoussinet.Calcul, donc la fonction Calcul peut travailler dessus comme s'il était à l'intérieur de ta classe, et par conséquent devient une méthode de ta classe.
Si cela te surprend, c'est que tu n'as pas bien compris à quoi sert le 1er argument des méthodes (self) dans les méthodes de classes en python.
Comme on ne sait pas ce que ton script est censé faire, en plus il faut bien connaître le module gtk, difficile d'émettre des critiques. On ne sait pas pourquoi tu veux placer une méthode de ta classe dans un autre module, une classe de même pas 100 lignes, c'est pas grand-chose niveau nombre de lignes d'une classe et encore moins d'un fichier py
Tu peux améliorer également ta méthode Calcul en testant les erreurs dans des boucles puisque tu testes la même chose. Et utiliser format pour afficher tes valeurs. Ce qui pourrait donner
Cela rend personnellement les choses plus claires que plusieurs conditions.
def Calcul(self): erreur = False for text in (N, dia, long, freq): if not Errors.is_numeric(text): Errors.MessageErreur() erreur = True break else: for text in (dia, long): if text == "0": Errors.MessageErreurZero() erreur = True break if not erreur: pression = float(N) / (float(dia) * float(long)) vitesse = float(dia) * pi * float(freq) / 60000 pv = pression * vitesse # mise a jour des labels de l'interface graphique afin d'avoir l'affichage des résultats self.cs_vitesse.set_label(str(vitesse)) self.cs_pression.set_label(str(pression)) self.cs_pv.set_label(str(pv)) repr = "Effort={}, Diamètre={}, Long={}, Freq={}".format(N, dia, long, freq) print(repr)
Cela rend personnellement les choses plus claires que plusieurs conditions.
mon fichier graphique (.glade) est organisé en volets différents et mon programme n'en est qu'au début, il va grandir pas mal au fil des modules que je vais implanter.