IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Générer un code barre


Sujet :

Python

  1. #41
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ces informations (row1, column1,...) étant récupérables via .grid_machin... pas besoin des les stocker "en plus" dans des variables globales.


    - W
    Je suis désolé, mais je ne saisis toujours pas.
    Nous avons des variables définies dans le corps du programme, variables qui sont modifiées depuis une fonction. Je ne vois pas en quoi accéder à l'état de grid()(dont les variables sont d'ailleurs accessibles depuis la fonction), vont permettre de modifier ses variables depuis la fonction sans utiliser global() (et autres)
    Citation Envoyé par wiztricks
    utiliser une seule variable globale dénombrant le nombre d'objets ajoutés dans le "grid" suffirait.
    En effet.

    @narvolo pour rappel il y a deux propositions indépendantes, je ne parle que de la première...
    Ici les variables globales ne servent qu'à mémoriser une information qu'on peut récupérer via .grid_size et/ou via .grid_slaves... donc on peut s'en passer.

    On peut aussi réduire leur nombre: si on veut disposer un objet dans un tableau d'au plus R lignes en ajoutant une colonne tout les R objets placés, on sait que la position (i, j) du nième objet sera calculable en fonction de n (avec divmod).

    - W

  2. #42
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Je suis désolé, mais je ne saisis toujours pas.
    Nous avons des variables définies dans le corps du programme, variables qui sont modifiées depuis une fonction.
    Ces variables stockent des informations dont on n'a pas besoin (parce qu'on peut les récupérer autrement):
    Par exemple, ici "count" compte le nombre d'objets ajoutés dans la Frame gérée via grid. On aurait pu en faire une variable "globale" incrémentée à chaque appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import tkinter as tk
     
    def callback():
     
        count = len(frame.grid_slaves())
        q, r = divmod(count, 3)
        label = tk.Label(frame, text=count)
        label.grid(column=q, row=r)
     
    root = tk.Tk()
    tk.Button(root, text='add...', command=callback).pack()
    frame = tk.Frame(root)
    frame.pack()
    tk.mainloop()

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #43
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    D'accord.
    Dit ainsi, je te suis

  4. #44
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par pedro.ortega Voir le message
    Grace à votre aide j'ai changé mon code. J'ai rajouté la commande input() pour pouvoir changer le nom du fichier SVG.
    Le code en ce moment est comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     # coding: utf-8
    import barcode
    import random
     
    def barcode_generator():
        num= random.randrange(1,10000000000000)
        print(num)
        image=barcode.get_barcode_class('ean13')
        image_bar=image(u'{}'.format(num))
        codebarre=open('C:\\Users\Acer\Desktop\Saint Nicolas\Projet','w')
        name=input()
        image.save(name+'.svg') in codebarre
        print("Code barre généré avec succès")
        codebarre.close()
     
    barcode_generator()
    Je voudrais savoir comment utiliser la fonction .save dans mon code et s'il est bien utilisé ou pas ?

    En ce moment le code tel qu'il est m'affiche comme erreur " PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Acer\\Desktop\\Saint Nicolas\\Projet' "
    Cela peut etre lié à quoi ?

    Merci
    Remarque: save() est une méthode de image_bar
    open() et close() sont des fonctions utilisées avec des fichiers 'standard' (ce ne sont pas des méthodes de l'objet image_bar)

  5. #45
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par pedro.ortega Voir le message
    En ce moment le code tel qu'il est m'affiche comme erreur " PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Acer\\Desktop\\Saint Nicolas\\Projet' "
    Là encore vous regardez l'erreur sans vous préoccuper de l'instruction qui l'a provoquée.
    Probablement la ligne 10 parce que "C:\\Users\\Acer\\Desktop\\Saint Nicolas\\Projet" est un répertoire.

    Apprendre est un préalable à vouloir coder... et même si on vous donne des bouts de code sans ce préalable vous ne pourrez pas les modifier sans vous prendre les pieds dans le tapis (c'est pour ça que je pense que ça ne sert à rien).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #46
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    (c'est pour ça que je pense que ça ne sert à rien).
    peut-être pas pour le PO, mais j'imagine que le post n'est pas lu que par lui ou les participants.
    Perso quand je fais une recherche sur un sujet particulier sur la toile, j'apprécie d'y trouver du code en réponse.
    Aussi, lorsque je vois stackoverflow, je clique.
    Lorsque je vois deloppez.com, j'hésite.
    Lorsque je vois openclassrooms.com, je fuis

  7. #47
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    peut-être pas pour le PO, mais j'imagine que le post n'est pas lu que par lui ou les participants.
    Je ne vois pas avec quels mots clefs on va bien pouvoir tomber sur cette discussion. Et qui va lire les 40+ réponses pour en extraire quelque chose?

    Citation Envoyé par Hominidé Voir le message
    Perso quand je fais une recherche sur un sujet particulier sur la toile, j'apprécie d'y trouver du code en réponse.
    Aussi, lorsque je vois stackoverflow, je clique.
    Leur système de notation des discussions et des auteurs des réponses permet de visualiser les contenus intéressants plus facilement... et en fait un outil "problème => solution" intéressant.

    Ici, on est plutôt dans un "forum de discussion": il faudrait un effort gigantesque de la modération pour remettre en forme les contenus intéressants. C'est la raison pour laquelle je persiste: inutile de donner des solutions à quelqu'un qui ne pourra pas les utiliser... sauf pour se faire plaisir à montrer qu'on peut coder çà.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #48
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Citation Envoyé par wiztricks
    Je ne vois pas avec quels mots clefs on va bien pouvoir tomber sur cette discussion.
    En cherchant python code barre et moteur de recherche paramétré avec une recherche de moins d'un an, cette discussion est référencée en 3eme position

    Citation Envoyé par wiztricks
    Et qui va lire les 40+ réponses pour en extraire quelque chose?
    pas moi, c'est sûr

    Citation Envoyé par wiztricks
    C'est la raison pour laquelle je persiste: inutile de donner des solutions à quelqu'un qui ne pourra pas les utiliser...
    Oui je te comprends. Je pense juste qu'une discussion, au-delà de qui l'initie, peut profiter à d'autres dont moi-même. Aussi lorsque je lis un code venant d'une personne tel que toi (maitrisant le langage mieux que moi), je me régale... mais bon ce n'est probablement pas le but d'un forum.

    Citation Envoyé par wiztricks
    sauf pour se faire plaisir à montrer qu'on peut coder çà.
    J'avoue faire partie de cette catégorie-là. Je suis là essentiellement pour mon plaisir.
    Même si cela a parfois pour conséquence d'apporter une aide, le moteur n'en reste pas moins égoïste

  9. #49
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    J'avoue faire partie de cette catégorie-là. Je suis là essentiellement pour mon plaisir.
    Même si cela a parfois pour conséquence d'apporter une aide, le moteur n'en reste pas moins égoïste
    Essayer de s'exprimer en français (ou en Python) est d'abord formateur/positif pour celui qui s'exprime: ça l'aide à mettre en forme ses idées et le motive à approfondir un peu.

    Si on s'efforce de rédiger, tester ses exemples de code, ... c'est un "vrai" travail et c'est déjà pas si mal même si ça n'aide pas plus que ça le PO: y en a qui progressent.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #50
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2022
    Messages : 26
    Par défaut
    Bonjour à tous,
    J'ai réussi à faire en sorte que le programme fonctionne et s'enregistre dans le bon dossier.
    Maintenant il me faudrait intégrer une fonction qui permet d'imprimer directement le code barre généré dans une imprimante précise, est-ce que c'est bien possible de le faire ?

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    from barcode import EAN13
    import tkinter as tk
    from tkinter import ttk
    from PIL import Image, ImageTk
    import random, os
    from svglib.svglib import svg2rlg
    from reportlab.graphics import renderPM
     
    row1 = 1
    row2 = 2
    column1 = 0
     
    def codebarre(event):
        global row1, row2, column1
        num = random.randint(1,9999999999999)
        ean = EAN13(f'{num:013}')
        name = entry.get()
        if os.path.exists(name+'.svg') or not name:
            entry.configure(bg="RED")
            entry.update_idletasks()
            root.after(500)
            entry.configure(bg="WHITE")
            return
        ean.save('C:\\Users\Acer\Desktop\Saint Nicolas\Projet\\'+name)
     
        label2 = tk.Label(root, text=name+".svg")
        label2.grid(row=row1, column=column1, columnspan=2)
     
        path=name+'.png'
        drawing = svg2rlg('C:\\Users\Acer\Desktop\Saint Nicolas\Projet\\'+name+".svg")
        renderPM.drawToFile(drawing, path, fmt="PNG")
        image = Image.open(path)    
        imagetk = ImageTk.PhotoImage(image)    
        label3 = tk.Label(root, image=imagetk)
        label3.image = imagetk
        label3.grid(row=row2, column=column1, columnspan=2)
     
        ttk.Separator(root, orient='horizontal').grid(row=row2+1, column=column1, columnspan=2, pady=5, ipadx=120)
     
        os.remove(path)
     
        entry.delete(0,tk.END)
        row1, row2 = row1+3, row2+3
        if row1%16==0:
            column1+=3
            row1=1
            row2=2
     
     
     
    root = tk.Tk()
    label = tk.Label(root, text = "NOM :")
    label.grid(row=0, column=0, padx=5, pady=5)
    entry = tk.Entry(root, width=20)
    entry.grid(row=0, column=1, padx=5)
    entry.focus_set()
    entry.bind("<Return>", codebarre)
    root.mainloop()
    Merci

  11. #51
    Invité
    Invité(e)
    Par défaut
    Salut !
    Là ça risque de fortement se complexifier !
    Et d'autant plus si tu veux faire ça sur une étiqueteuse...

    Peut-être que ceci pourrait aider ?
    http://timgolden.me.uk/python/win32_...l#shellexecute

  12. #52
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pedro.ortega Voir le message
    Maintenant il me faudrait intégrer une fonction qui permet d'imprimer directement le code barre généré dans une imprimante précise, est-ce que c'est bien possible de le faire ?
    Tu peux passer par les esc/pos.
    Et t'as une lib python dispo pour ça.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #53
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2022
    Messages : 26
    Par défaut
    Bonjour à tous,

    Merci de l'aide apporté, j'ai changé mon programme et intégré la bibliothèque Python ESC/POS.
    Par contre j'ai un problème dans le code alors que j'ai bien identifé l'imprimante pour l'impression.
    Voici le code tel qu'il est maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    from tokenize import Name
    from unicodedata import name
    from barcode import EAN13
    import tkinter as tk
    from tkinter import ttk
    from PIL import Image, ImageTk
    import random, os
    from svglib.svglib import svg2rlg
    from reportlab.graphics import renderPM
    from escpos.printer import Usb
     
     
    row1 = 1
    row2 = 2
    column1 = 0
     
    def codebarre(event):
        global row1, row2, column1
        num = random.randint(1,9999999999999)
        ean = EAN13(f'{num:013}')
        p = Usb(0x04F9, 0x02C2)
        p.barcode(ean, 64, 2,)
        name = entry.get()
        if os.path.exists(name+'.svg') or not name:
            entry.configure(bg="RED")
            entry.update_idletasks()
            root.after(500)
            entry.configure(bg="WHITE")
            return
        ean.save('C:\\Users\Acer\Desktop\Saint Nicolas\Projet\\'+name)
     
     
        label2 = tk.Label(root, text=name+".svg")
        label2.grid(row=row1, column=column1, columnspan=2)
     
        path=name+'.png'
        drawing = svg2rlg('C:\\Users\Acer\Desktop\Saint Nicolas\Projet\\'+name+".svg")
        renderPM.drawToFile(drawing, path, fmt="PNG")
        image = Image.open(path)    
        imagetk = ImageTk.PhotoImage(image)    
        label3 = tk.Label(root, image=imagetk)
        label3.image = imagetk
        label3.grid(row=row2, column=column1, columnspan=2)
     
        ttk.Separator(root, orient='horizontal').grid(row=row2+1, column=column1, columnspan=2, pady=5, ipadx=120)
     
        os.remove(path)
     
        entry.delete(0,tk.END)
        row1, row2 = row1+3, row2+3
        if row1%16==0:
            column1+=3
            row1=1
            row2=2
     
     
     
    root = tk.Tk()
    label = tk.Label(root, text = "NOM :")
    label.grid(row=0, column=0, padx=5, pady=5)
    entry = tk.Entry(root, width=20)
    entry.grid(row=0, column=1, padx=5)
    entry.focus_set()
    entry.bind("<Return>", codebarre)
    root.mainloop()
    Voici l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2800.0_x64__qbz5n2kfra8p0\lib\tkinter\__init__.py", line 1892, in __call__
        return self.func(*args)
      File "c:\Users\Acer\Desktop\Saint Nicolas\Projet\exemplepy.py", line 21, in codebarre
        p = Usb(0x04F9, 0x02C2)
      File "C:\Users\Acer\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\escpos\printer.py", line 51, in __init__
        self.open()
      File "C:\Users\Acer\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\escpos\printer.py", line 57, in open
        raise USBNotFoundError("Device not found or cable not plugged in.")
    escpos.exceptions.USBNotFoundError: USB device not found
    Pour info l'imprimante est bien connecté et detecté par l'ordi comme dans l'image en pièce jointe.

    Merci d'avance
    Images attachées Images attachées  

Discussions similaires

  1. Générer des codes barre EAN-13
    Par nico62370 dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/06/2014, 10h17
  2. [PHP 4] Générer un code barre 2d PDF417
    Par moumoune_11 dans le forum Langage
    Réponses: 4
    Dernier message: 11/03/2009, 19h43
  3. Réponses: 2
    Dernier message: 19/02/2008, 21h55
  4. Comment générer un code barre 2D ?
    Par topben dans le forum Composants VCL
    Réponses: 2
    Dernier message: 23/01/2008, 17h52
  5. [GD] Générer un code barre 128
    Par fast462 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 12/01/2008, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo