Intégrer un resultat photo sur Tkinter Python

Résolu
GEEK3_3843 Messages postés 47 Statut Membre -  
GEEK3_3843 Messages postés 47 Statut Membre -

Bonjour,

Dernièrement j'ai développé un script permettant la création de QR Code avec le module Tkinter. Mais j'aimerais ajouter à la fenêtre Tkinter le résultat obtenue c'est à dire le QR Code, or je ne sais pas comment le rajouter. En sachant que le QR s'enregistre dans l'ordinateur après saisie.

Pouvez vous donc m'indiquer le script à rajouter.

Merci pour votre réactivité.


GEEK3_3843

2 réponses

  1. ouplaboum
     

    Bonsoir, tu t'imagines bien que sans montrer la moindre ligne de code, personne ne va pouvoir t'aider.

    0
  2. GEEK3_3843 Messages postés 47 Statut Membre
     

    Pas faux. Excusez moi. Je débute sur ce forum.

    from tkinter import *
    import qrcode
    
    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()
    
    window.title("QR Code Generator")
    window.geometry("800x600")
    window.config(background="#41B77F")
    window.iconbitmap("D:/Qr Code/logo.ico")
    
    label_title = Label(window, text="QR Code Generator", font=("Arial", 20), bg="#41B77F", fg="white")
    label_title.pack()
    
    
    # créer une entrée pr donner l'URL
    
    URL_label = Label(window, text = "URL : ", font=("Arial", 10),  bg="#41B77F")
    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="#41B77F")
    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=getEntry)
    Button_Confirm.place(x = 50, y = 190)
    
    # !!!!!! afficher le qr code !!!!!!!!!!!!!!!!!!!!
    # !!!!!! partie que je cherche à résoudre !!!!!!!
    
    # 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)
    
    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)
    
    #config fenetre pour add menu bar
    
    window.config(menu=menu_bar)
    
    window.mainloop()

    0
    1. ouplaboum
       

      Bonjour, je ne comprends pas où se situe le souci.

      Tu peux afficher une image dans un simple Label, Canvas, ...

      ...
      
      Button_Confirm = Button(window, height=1, width=10, text="Confirm", command=show_qrcode)
      Button_Confirm.place(x = 50, y = 190)
      
      qrcode_label = Label(window)
      qrcode_label.place(x=450, y=80)
      
      # créer un menu
      menu_bar = Menu(window)
      
      ---

      Et donc

      def show_qrcode():
          img = qrcode.make(res)
          img_name = name_url.get() + ".png"
          img.save(img_name)
          pimg = PhotoImage(file=img_name)
          qrcode_label.qrcode_img = pimg
          qrcode_label['image'] = pimg

      Préfère l'utilisation de pack ou grid à place qui positionne en absolu, ce qui n'est pas une bonne chose.

      0
    2. GEEK3_3843 Messages postés 47 Statut Membre > ouplaboum
       

      Bonjour,

      Merci beaucoup pour l’intérêt que vous y portez.

      J'ai rajouter et modifier ces lignes de codes mais une erreur apparait :

      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > GEEK3_3843 Messages postés 47 Statut Membre
       

      bonjour, tu t'imagines bien que, sans montrer ton code modifié, personne ne va pouvoir t'aider.

      0
    4. ouplaboum > GEEK3_3843 Messages postés 47 Statut Membre
       

      Salut, tu vois bien que j'ai simplement omis de mettre res = URL_1.get() au début de la fonction.

      Note que si tu n'as pas nécessairement besoin de générer une image, tu peux utiliser les data (matrice) que propose le module.

      import tkinter as tk
      import qrcode
      
      QRCODE_COLORS = 'white', 'navy'
      
      
      def qrcode_generate():
          if not url_entry.get():
              return
          qrc = qrcode.QRCode()
          qrc.add_data(url_entry.get())
          qrc_size = len(qrc.get_matrix())
          margin = 177 % qrc_size // 2
          square_size = 177 // qrc_size * 2
          qrcode_canvas['bg'] = QRCODE_COLORS[0]
          qrcode_canvas.delete('rect')
          for i, row in enumerate(qrc.get_matrix()):
              for j, value in enumerate(row):
                  qrcode_canvas.create_rectangle(
                      margin + j * square_size,
                      margin + i * square_size,
                      margin + square_size + j * square_size,
                      margin + square_size + i * square_size,
                      fill=QRCODE_COLORS[value],
                      outline=QRCODE_COLORS[value],
                      tag='rect',
                  )
      
      
      window = tk.Tk()
      
      url_label = tk.Label(
          window, text="URL : ", font=("Arial", 10), bg="#41B77F", fg='white'
      )
      url_label.grid(row=0, column=0, padx=(10, 0), pady=(10, 0))
      url_entry = tk.Entry(window, bg='black', fg='white')
      url_entry.grid(row=0, column=1, pady=(10, 0))
      url_entry.focus()
      
      qrcode_canvas = tk.Canvas(window, width=354, height=354, bg='yellow')
      qrcode_canvas.grid(row=0, column=2, rowspan=3, padx=10, pady=10)
      window.rowconfigure(2, weight=1)
      
      generate_button = tk.Button(
          window, text="Générer", bg='black', fg='yellow', command=qrcode_generate
      )
      generate_button.grid(row=1, column=0, columnspan=2, pady=10)
      
      window.mainloop()

      Code qui devrait faire ce que tu souhaites, à tester.

      1
    5. GEEK3_3843 Messages postés 47 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       

      Merci, c'est fait !

      1