Problème d'éxécution d'un script Python

Résolu/Fermé
GEEK3_3843 Messages postés 44 Date d'inscription jeudi 27 octobre 2022 Statut Membre Dernière intervention 27 juillet 2023 - Modifié le 17 janv. 2023 à 18:56
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 23 janv. 2023 à 13:48

Bonjour,

Lors de l'essaie de ce script, le message que j avais initialement rempli : Une erreur s'est produite.... s'affiche. Cela quand je decide de télécharger le pdf sous le label de Print. C'est donc la fonction print_paper qui ne fonctionne pas je pense.

Pouvez vous m'aider ?

Je vous remercie.

Cordialement.

from tkinter import *
import qrcode
from tkinter import filedialog
from tkinter import messagebox 
import webbrowser
import os

window = Tk()

def getEntry():
    res = URL_1.get()
    print(res)
    img = qrcode.make(res)
    img.save(name_url.get() + ".png")

def clear():
    URL_1.delete("0","end")
    name_url.delete("0","end")
    
def window_quit():
    window.destroy()

def open_module():
    filename = filedialog.askopenfilename(initialdir = "/", title = "Select a File", filetypes = (("Text files", "*.txt*"), ("all files", "*.*")))
    label_file_explorer.configure(text="File Opened: "+filename)

def print_paper():
    try:
        filepath = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=[("PDF files", "*.pdf")])
        if filepath:
            canvas = window.Canvas(root, bg="blue")
            canvas.pack(fill=window.BOTH, expand=True)
            canvas.postscript(file=filepath, colormode='color')
            messagebox.showinfo("Succès", "Le fichier a été enregistré avec succès.")
    except Exception as e:
        messagebox.showerror("Erreur", "Une erreur est survenue lors de l'enregistrement du fichier.")       
            
def show_qrcode():
    img = qrcode.make(URL_1.get())
    img_name = name_url.get() + ".png"
    img.save(img_name)
    pimg = PhotoImage(file=img_name)
    qrcode_label.qrcode_img = pimg
    qrcode_label['image'] = pimg

def help_training():
    webbrowser.open_new("file:///D:/Qr%20Code/training%20help.html")                                                                                                                                            
                                                                                  
window.title("QR Code Generator")
window.geometry("800x600")
window.config(background="blue")
window.iconbitmap("D:/Qr Code/logo.ico")

label_title = Label(window, text="QR Code Generator", font=("Arial", 20), bg="blue", fg="white")
label_title.pack()

# créer une entrée pr donner l'URL

URL_label = Label(window, text = "URL : ", font=("Arial", 10),  bg="blue")
URL_label.place( x = 50, y = 50)    

URL_1 = Entry(window) 
URL_1.place(x = 50, y = 80)

# créer une entrée pr donner le nom du QR Code

name_label = Label(window, text = "URL's name :", font=("Arial", 10), bg="blue")
name_label.place( x = 50, y = 110)
name_url = Entry(window)
name_url.place(x = 50, y = 140)

Button_Confirm = Button(window, height=1, width=10, text="Confirm", command=show_qrcode)
Button_Confirm.place(x = 50, y = 190)

qrcode_label = Label(window, bg="blue")
qrcode_label.place(x=450, y=80)

# créer un menu

menu_bar = Menu(window)

file_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="New", command=clear)
file_menu.add_command(label="Print", command=print_paper)

options_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Options", menu=options_menu)
options_menu.add_command(label="Quit", command=window_quit)

help_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Help", menu=help_menu)
help_menu.add_command(label="Training", command=help_training)


#config fenetre pour add menu bar

window.config(menu=menu_bar)

window.mainloop()

2 réponses

Salut, c'est bien d'utiliser les exceptions, mais là on ne sait quelle erreur est chopée. Affiche le type de l'exception attrapée, ou plus simple un print de e.

0
GEEK3_3843 Messages postés 44 Date d'inscription jeudi 27 octobre 2022 Statut Membre Dernière intervention 27 juillet 2023
16 janv. 2023 à 19:45

Bonjour, merci mais après des recherches j'ai enlevé cette exception pour la remplacer par une ligne plus courte et plus simple.

Problème : cela ne résous pas le problème de départ !

Peut-être manque t-il une information ?

Cdt

import os

window = Tk()

def getEntry():
    res = URL_1.get()
    print(res)
    img = qrcode.make(res)
    img.save(name_url.get() + ".png")

def clear():
    URL_1.delete("0","end")
    name_url.delete("0","end")
    
def window_quit():
    window.destroy()

def open_module():
    filename = filedialog.askopenfilename(initialdir = "/", title = "Select a File", filetypes = (("Text files", "*.txt*"), ("all files", "*.*")))
    label_file_explorer.configure(text="File Opened: "+filename)

def print_page():
    try:
        filename = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=[("Fichier PDF", "*.pdf")])
        if filename:
            os.system(f"lpr -P PDF -o fit-to-page {filename}")
            messagebox.showinfo("Succès", "Le fichier a été enregistré avec succès.")
    except:
        messagebox.showerror("Error", "Une erreur est survenue lors de l'enregistrement du fichier.")       
            
def show_qrcode():
    img = qrcode.make(URL_1.get())
    img_name = name_url.get() + ".png"
    img.save(img_name)
    pimg = PhotoImage(file=img_name)
    qrcode_label.qrcode_img = pimg
    qrcode_label['image'] = pimg

def help_training():
    webbrowser.open_new("file:///D:/Qr%20Code/training%20help.html")                                                                                                                                            
                                                                                  
window.title("QR Code Generator")
window.geometry("800x600")
window.config(background="blue")
window.iconbitmap("D:/Qr Code/logo.ico")

label_title = Label(window, text="QR Code Generator", font=("Arial", 20), bg="blue", fg="white")
label_title.pack()

# créer une entrée pr donner l'URL

URL_label = Label(window, text = "URL : ", font=("Arial", 10),  bg="blue")
URL_label.place( x = 50, y = 50)    

URL_1 = Entry(window) 
URL_1.place(x = 50, y = 80)

# créer une entrée pr donner le nom du QR Code

name_label = Label(window, text = "URL's name :", font=("Arial", 10), bg="blue")
name_label.place( x = 50, y = 110)
name_url = Entry(window)
name_url.place(x = 50, y = 140)

Button_Confirm = Button(window, height=1, width=10, text="Confirm", command=show_qrcode)
Button_Confirm.place(x = 50, y = 190)

qrcode_label = Label(window, bg="blue")
qrcode_label.place(x=450, y=80)

# créer un menu

menu_bar = Menu(window)

file_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="New", command=clear)
file_menu.add_command(label="Print", command=print_page)

options_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Options", menu=options_menu)
options_menu.add_command(label="Quit", command=window_quit)

help_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Help", menu=help_menu)
help_menu.add_command(label="Training", command=help_training)


#config fenetre pour add menu bar

window.config(menu=menu_bar)

window.mainloop()
0
claplotis > GEEK3_3843 Messages postés 44 Date d'inscription jeudi 27 octobre 2022 Statut Membre Dernière intervention 27 juillet 2023
16 janv. 2023 à 22:02

L'exception est toujours là, sauf que tu ne cherches plus à l'attraper...

def print_page():
    try:
        filename = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=[("Fichier PDF", "*.pdf")])
        if filename:
            os.system(f"lpr -P PDF -o fit-to-page {filename}")
            messagebox.showinfo("Succès", "Le fichier a été enregistré avec succès.")
    except Exception as e:
        messagebox.showerror("Error", e)       
        

As-tu regardé ce que valait filename ?
Il contient un objet TextIOWrapper.
https://docs.python.org/3/library/io.html#io.TextIOWrapper

Bref, l'objet usuel lorsqu'on ouvre un fichier.

Donc, je pense que tu cherches à fournir à la commande système lpr le path du fichier ? filename.name donc.

En revanche je ne sais ce que fais cette commande lpr ni les arguments à fournir.

0
GEEK3_3843 Messages postés 44 Date d'inscription jeudi 27 octobre 2022 Statut Membre Dernière intervention 27 juillet 2023 > claplotis
17 janv. 2023 à 20:55

Merci beaucoup.

Mais la je sais pas du tout quoi faire donc je pense je vais faire autrement.

Si vous avez des idées je suis preneur !

Merci beaucoup en tout cas pour l'attention que vous y portez.

Cdt

0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 20 janv. 2023 à 14:31

Bonjour,

Contrairement à ce que dit claplotis #3, chez moi la fonction filedialog.asksaveasfilename retourne bien une chaîne de caractère.

from tkinter import filedialog

filename = filedialog.asksaveasfilename(
    title="Sélectionner, le fichier",
    filetypes=[("Fichier PDF", "*.pdf")]
)

print(filename, type(filename)) # Exemple: /home/tata/toto.pdf <class 'str'>

Le problème vient selon moi de la commande système que tu veux ensuite exécuter. Je devine que tu veux imprimer quelque chose dans un fichier pdf, mais tu ne précise pas quoi.

D'ailleurs si je lance lance dans un terminal une commande du genre :

lpr -P PDF -o fit-to-page toto.pdf

... j'obtiens :

lpr: Error - The printer or class does not exist.

Donc pour avancer, ma question est assez simple :-) Quel est le but de ta fonction print_paper ?

Est-ce que le but est de générer un pdf à partir des données saisies (voir l'autre discussion que tu as lancée) ?

Bonne chance

0
GEEK3_3843 Messages postés 44 Date d'inscription jeudi 27 octobre 2022 Statut Membre Dernière intervention 27 juillet 2023
20 janv. 2023 à 18:29

Merci, oui je vais me contenter de l'autre discussion lancées.

Merci infiniment

Cdt.

0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749 > GEEK3_3843 Messages postés 44 Date d'inscription jeudi 27 octobre 2022 Statut Membre Dernière intervention 27 juillet 2023
23 janv. 2023 à 13:48

Ça marche, on se retrouve sur l'autre fil de discussion. À bientôt :-)

0