Topic: Bottone con immagini  (Letto 2817 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Ricki MS-DOS PY

  • python habilis
  • **
  • Post: 76
  • Punti reputazione: 0
    • Mostra profilo
Bottone con immagini
« il: Settembre 05, 2009, 12:48 »
io ho fatto un GUI così:
[hlpycode]from Tkinter import *

class Finestra(Tk):

   def __init__(self):
      Tk.__init__(self)
      self.title('finestra')
      self.geometry("%dx%d" % (800, 640))

      # creo il bottone
      b = Button(self, text='chiudi', bg='red', fg='white', command=self.exit)
      b.place(x=755, y=5)

      img1 = PhotoImage(file='C:\RICKI\SystemX\scrittura.gif')

      b1 = Button(self, image=img1, command=self.scrittura)
      b1.place (x=15, y=50)

      l1 = Label(self, text='Scrittura')
      l1.place (x=150, y=100)
      
      img2 = PhotoImage(file='C:\RICKI\SystemX\disegno.gif')
      
      b2 = Button(self, image=img2, command=self.Disegno)
      b2.place (x=15, y=200)

      l2 = Label(self, text='Disegno')
      l2.place (x=150, y=250)

      img3 = PhotoImage(file='C:\RICKI\SystemX\internet.gif')

      b3 = Button(self, image=img3, command=self.Internet)
      b3.place (x=15, y=350)

      l3 = Label(self, text='Internet')
      l3.place (x=150, y=400)

      img4 = PhotoImage(file='C:\RICKI\SystemX\File.gif')

      b4 = Button(self, image=img4, command=self.File)
      b4.place (x=250, y=50)

      l4 = Label(self, text='Gestione File')
      l4.place (x=400, y=100)

      menubar = Menu(self)

      Xmenu = Menu(menubar, tearoff=0)
      progmenu = Menu(Xmenu, tearoff=0)
      Xmenu.add_cascade(label="Programmi", menu=progmenu)
      progmenu.add_command (label="Scrittura", command=self.scrittura)
      progmenu.add_command (label="Disegno", command=self.Disegno)
      progmenu.add_command (label="Internet", command=self.Internet)
      progmenu.add_command (label="Gestioni File", command=self.File)
      filemenu = Menu(Xmenu, tearoff=0)
      Xmenu.add_separator()
      Xmenu.add_command(label="Spegni", command=self.exit)
      menubar.add_cascade(label="X", menu=Xmenu)

      self.config(menu=menubar)


      

      
   def mostra(self):
      self.mainloop()
 
   def exit(self):
      self.destroy()

   def scrittura(self):
      import os
      os.startfile ('C:\RICKI\SystemX\scrittura.bat')

   def Disegno(self):
      import os
      os.startfile ('C:\RICKI\SystemX\Disegno.bat')

   def Internet(self):
      import os
      os.startfile ('C:\RICKI\SystemX\Internet.bat')

   def File(self):
      import os
      os.startfile ('C:\RICKI\SystemX\Gestione_File.bat')

   def __chiudi(self):
      self.destroy()
   
   
      
if __name__ == '__main__':
   f = Finestra()
   f.mostra()[/hlpycode]

però quando la eseguo non si vedono le immagini, i bottoni hanno le dimensioni dell'immagine e non sono cliccabili!!  :dont-know:

ho provato di tutto ma non funziona!!  :(
« Ultima modifica: Settembre 15, 2009, 11:06 da Charles_Stain »

Offline Charles_Stain

  • python sapiens sapiens
  • *
  • moderatore
  • Post: 1.220
  • Punti reputazione: 0
    • Mostra profilo
    • My personal website
Re: Bottone con immagini
« Risposta #1 il: Settembre 15, 2009, 11:06 »
Lo ridico per l'ennesima volta: usate il tasto col logo di python per postare pezzi di codice, non il tasto quote.
Vi prego, ne vale la sanità mentale dei moderatori  ;(

Offline P300

  • python habilis
  • **
  • Post: 95
  • Punti reputazione: 0
    • Mostra profilo
Re: Bottone con immagini
« Risposta #2 il: Ottobre 12, 2009, 13:49 »
Con questo codice il bottone viene generato correttamente, ed è cliccabile:

[hlpycode]
from Tkinter import *

top = Tk()
img = PhotoImage(file='figura1.gif')

def Esegui():
    print('Bottone premuto!')
but = Button(top, image=img, command=Esegui)
but.pack()

top.mainloop()
[/hlpycode]

Ovviamente il bottone ha la dimensione dell'immagine. Se si vuole un bottone più piccolo basterebbe ridimensionare l'immagine, no?

Offline Ricki MS-DOS PY

  • python habilis
  • **
  • Post: 76
  • Punti reputazione: 0
    • Mostra profilo
Re: Bottone con immagini
« Risposta #3 il: Ottobre 21, 2009, 16:35 »
io ho fatto così:

[hlpycode]from Tkinter import *

class Finestra(Tk):

   def __init__(self):
      Tk.__init__(self)
      self.title('System X')
      self.geometry("%dx%d" % (800, 640))

      

      def exit():
         self.destroy()

      def scrittura():
         import os
         os.startfile ('C:\RICKI\SystemX\scrittura.bat')

      def Disegno():
         import os
         os.startfile ('C:\RICKI\SystemX\Disegno.bat')

      def Internet():
         import os
         os.startfile ('C:\RICKI\SystemX\Internet.bat')

      def File():
         import os
         os.startfile ('C:\RICKI\SystemX\Gestione_File.bat')

      
      b = Button(self, text='spegni', bg='red', fg='white', command=exit)
      b.place(x=755, y=5)

      img1 = PhotoImage(file='C:\RICKI\SystemX\scrittura.gif')

      b1 = Button(self, image=img1, command=scrittura)
      b1.place (x=15, y=50)
      b1.pack()

      l1 = Label(self, text='Scrittura')
      l1.place (x=150, y=100)
      
      img2 = PhotoImage(file='C:\RICKI\SystemX\disegno.gif')
      
      b2 = Button(self, image=img2, command=Disegno)
      b2.place (x=15, y=200)
      b2.pack()

      l2 = Label(self, text='Disegno')
      l2.place (x=150, y=250)

      img3 = PhotoImage(file='C:\RICKI\SystemX\internet.gif')

      b3 = Button(self, image=img3, command=Internet)
      b3.place (x=15, y=350)
      b3.pack()

      l3 = Label(self, text='Internet')
      l3.place (x=150, y=400)

      img4 = PhotoImage(file='C:\RICKI\SystemX\File.gif')

      b4 = Button(self, image=img4, command=File)
      b4.place (x=250, y=50)
      b4.pack()

      l4 = Label(self, text='Gestione File')
      l4.place (x=400, y=100)

      menubar = Menu(self)

      Xmenu = Menu(menubar, tearoff=0)
      progmenu = Menu(Xmenu, tearoff=0)
      Xmenu.add_cascade(label="Programmi", menu=progmenu)
      progmenu.add_command (label="Scrittura", command=scrittura)
      progmenu.add_command (label="Disegno", command=Disegno)
      progmenu.add_command (label="Internet", command=Internet)
      progmenu.add_command (label="Gestioni File", command=File)
      filemenu = Menu(Xmenu, tearoff=0)
      Xmenu.add_separator()
      Xmenu.add_command(label="Spegni", command=exit)
      menubar.add_cascade(label="System X", menu=Xmenu)

      self.config(menu=menubar)


      

      
   def mostra(self):
      self.mainloop()
 
   
   def __chiudi(self):
      self.destroy()
   
   
      
if __name__ == '__main__':
   f = Finestra()
   f.mostra()[/hlpycode]




MA:

1. i bottoni ora sono tutti allineati al centro uno sotto l'altro ignorando il comando PLACE  :thinking:

2. i bottoni appaiono ancora con la sagoma dell'immagine ma sembre non cliccabile!!  :(

come dovo fare!!!  :py:

aiutatemi!!!  :(


Offline Gianpatrizio

  • python unicellularis
  • *
  • Post: 49
  • Punti reputazione: 0
    • Mostra profilo
Re:Bottone con immagini
« Risposta #4 il: Aprile 23, 2020, 18:31 »
Buongiorno, inanzitutto mi scuso per il ritardo di questa risposta. Il tuo errore è veramente un errore molto semplice, il fatto è che python da SEMPRE la precedenza all'ultima dichiarazione di contenuto asseganta a una variabile, quindi se prima dichiari il metodo .place() e poi subito dopo il metodo .pack() automaticamente python prendera come metodo l'ultimo, in questo caso il metodo .pack(). Per rimediare a quest'errore dovrebbe solo togliere suo script il metodo .pack() e lasciare solo il metodo .place()