Question découpage de scripts en morceaux
amiga56
Messages postés
7
Statut
Membre
-
amiga56 Messages postés 7 Statut Membre -
amiga56 Messages postés 7 Statut Membre -
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
- Comment couper une vidéo en plusieurs morceaux - Guide
- Microsoft activation scripts (mas) - Accueil - Windows
- 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.