Topic: PIL e Canvas tkinter  (Letto 311 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline brunopython74

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
PIL e Canvas tkinter
« il: Maggio 29, 2020, 22:14 »
Salve ragazzi, è da poco che programmo in python trovo difficoltà a visualizzare una immagine in Canvas, mi porta errore.
Ho importato i moduli:

from PIL import ImageTk,Image

e questa è la funzione:

def tesseRa():
        finestra1=Tk()
        finestra1.title("Tessera Sanitaria Visualizza")
        finestra1.geometry("400x400")
        finestra1.iconbitmap(r"c:\python\esempi\TS.ico")
        immagine=ImageTk.PhotoImage(Image.open("c:\Python\Esempi\sanitaria.png"))
        disegno=Canvas(finestra1,height=290,width=470,bg="white")
        im=disegno.create_image(250,135,image=immagine)
        disegno.grid(row=0,column=0)
        finestra1.mainloop()


in questa funzione all' interno dello script.
Quando la chiamo mi dovrebbe visualizzare all' interno della finestra 1 l' immagine disegnata in Canvas

infoMenu=Menu(barraMenu)
    barraMenu.add_cascade(label="Info",menu=infoMenu)
    infoMenu.add_command(label="Tessera",command=tesseRa)

ma mi porta questo errore:

 Traceback (most recent call last):
  File "C:\Python\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "c:/Python/Esempi/TesseraSanitaria.py", line 43, in tesseRa
    im=disegno.create_image(250,135,image=immagine)
  File "C:\Python\lib\tkinter\__init__.py", line 2785, in create_image
    return self._create('image', args, kw)
  File "C:\Python\lib\tkinter\__init__.py", line 2771, in _create
    return self.tk.getint(self.tk.call(
_tkinter.TclError: image "pyimage1" doesn't exist
« Ultima modifica: Maggio 29, 2020, 22:34 da brunopython74 »

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.154
  • Punti reputazione: 9
    • Mostra profilo
Re:PIL e Canvas tkinter
« Risposta #1 il: Maggio 29, 2020, 23:25 »
quella alla riga 5 è una path
quella alla riga 6... no

Offline brunopython74

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Re:PIL e Canvas tkinter
« Risposta #2 il: Maggio 30, 2020, 20:56 »
si scusa quella di riga 5 è una patch...mentre quella di riga 6 è un' immagine .....ma quando vado in create_image ....
in image ci va l'immagine


    tela=Canvas(finestra2,width=800,height=600,bg="white")
    tessera1=PhotoImage(file='c:\sanitaria.png')
    tela.create_image(200,200,image=tessera1)


ad esempio cosi mi visualizza l immagine in canvas

    print(stringa)
    canvas=Canvas(finestra,bg="white",width=430,height=330)
    canvas.place(x=10,y=0)  #posiziona la tessera
    immagine=PhotoImage(file=r"\sanitaria.png")
    immagine.config(width=470,height=400)#dimensiona immagine
    canvas.create_image(200,200,image=immagine)#sposta l'immagine
    nome_C=canvas.create_text(200,200,text=stringa)




non capisco dove stia l'errore....mi puoi spiegare?
l'ho messa all'interno di una seconda finestra non di quella principale....in quella principale mi funziona
« Ultima modifica: Maggio 30, 2020, 21:21 da brunopython74 »

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.154
  • Punti reputazione: 9
    • Mostra profilo
Re:PIL e Canvas tkinter
« Risposta #3 il: Maggio 31, 2020, 11:17 »
Qual è la differenza tra

PhotoImage(file='c:\sanitaria.png')

e

PhotoImage(file=r"\sanitaria.png")

?
Sai che cosa significa la "r" davanti alla stringa?
Se non lo sai, il consiglio è sempre quello: stai cercando di fare delle cose enormemente più complesse di quanto consentito dal tuo livello di preparazione. Lascia stare Pil, lascia stare completamente la manipolazione delle immagini, studia Python seguendo un buon manuale passo-passo per almeno sei mesi prima di ricominciare con piccoli esercizi (Pil, dopo circa un anno di studio di buona lena, non di meno).
Il Lutz è sempre una buona scelta, come libro.
Puoi anche dare un'occhiata al tutorial ufficiale di Pyhton, che di recente mi sono messo a tradurre: https://pytutorial-it.readthedocs.io
Infine, se usi python in windows, una ottima idea sarebbe il mio libro, che per lo meno ti insegna che cosa è una path (e non una patch) https://leanpub.com/pythoninwindows ma da leggere *accanto* a un buon manuale, non certo come un sostituto di un buon manuale.


PS: la documentazione delle stringhe, con la spiegazione di "r" e molto altro ancora, è qui https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str
Però queste sono davvero le basi delle basi delle basi di Python, e sono spiegate in modo molto più chiaro nelle primissime pagine di qualsiasi buon manuale.

Offline brunopython74

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Re:PIL e Canvas tkinter
« Risposta #4 il: Giugno 02, 2020, 01:22 »
r/ return carriage .....grazie per il materiale .......ma in alcune guide ho visto che funzionava quella path
la traduzione in italiano è molto interessante

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 381
  • Punti reputazione: 0
    • Mostra profilo
Re:PIL e Canvas tkinter
« Risposta #5 il: Giugno 02, 2020, 07:56 »
r/ return carriage .....grazie per il materiale .......ma in alcune guide ho visto che funzionava quella path
la traduzione in italiano è molto interessante

Nel caso in questione, credo proprio no, il carriage return farebbe parte della stringa, tipo "abcd\r" mentre con la notazione
r'\sanitaria.png'

siamo in presenza di un prefisso "esterno" alla stringa.
Leggendo qua, scopriamo che siamo in presenza di un "stringprefix" che
Citazione
Unless an 'r' or 'R' prefix is present, escape sequences in string and bytes literals are interpreted according to rules similar to those used by Standard C. The recognized escape sequences are:...

... linguaggio complesso python, si scoprono continuamente cose ;)

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.154
  • Punti reputazione: 9
    • Mostra profilo
Re:PIL e Canvas tkinter
« Risposta #6 il: Giugno 02, 2020, 10:23 »
Sì beh, certo... il problema con la documentazione è che bisognerebbe leggerla.