[Python] menu a tendina

Enrico 'Henryx' Bianchi henryx_b a yahoo.it
Lun 29 Gen 2007 22:34:28 CET


lorenzo wrote:
> 1) non conosco la lingua inglese e molti manuali non esistono in italiano
> 2) l'help di python è in inglese
>   
A questi due quesiti ti rispondo semplicemente: http://www.python.it 
sezione documentazione (tra parentesi, come hai fatto ad iscriverti alla 
lista e non notare quella sezione?)
> 3)nelle introduzioni che ho letto non si parla mai di interfacce grafiche
> sbirciando qua e la tra i codici sono riuscito a fare il programmino allegato 
>   
Il problema delle interfacce grafiche in Python e` che non ne esiste una 
standard. Certo, TKinter e` distribuita assieme alla libreria standard, 
ma non per questo e` l'unica disponibile e presa in considerazione 
(soprattutto per il fatto che e` limitata e poco integrata con il resto 
del sistema). Oltre a TKinter, dai uno sguardo a PyGTK, PyQT e wxPython 
(personalmente preferisco la prima, ma sono gusti)

> se qualcuno ha un pò di tempo e voglia potrebbe spiegarmi come posso fare a 
> creare un menu in una finestra e a metterci un immagine 
>   
Attualmente sto studiando anch'io i menu` in PyGTK, e devo dire che, una 
volta capito il meccanismo, e` piu` semplice del previsto. Tra l'altro, 
la stessa metodologia puo` essere utilizzata per creare toolbar:

import gtk
import pygtk

def create_window_with_menus():
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.set_border_width(10)
    window.resize(600, 400)

    vbox = gtk.VBox(False, 0)
    self.__window.add(vbox)

    s = Signals() # e` una mia classe contenente i segnali da agganciare 
alle voci del menu`
    s.set_window(window)
   
    ui = gtk.UIManager()

    menu = '''<ui>
    <menubar name="MenuBar">
      <menu action="File">
        <menuitem action="Quit"/>
      </menu>
      <menu action="Edit">
        <menuitem action="Preferences"/>
      </menu>
    </menubar>
  </ui>'''

    accel_group = ui.get_accel_group()
    window.add_accel_group(accel_group)

    action_group = gtk.ActionGroup('Main')
    action_group.add_actions([('Quit', gtk.STOCK_QUIT, '_Quit', None,
                                       'Quit the Program', s.close),
                               ('File', None, '_File'),
                               ('Edit', None, '_Edit'),
                               ('Preferences', gtk.STOCK_PREFERENCES, 
'_Preferences',
                                       '<Control>p', 'Edit preferences', 
s.edit_prefs)])
    ui.insert_action_group(action_group, 0)
    ui.add_ui_from_string(menu)
    menu_bar = ui.get_widget('/MenuBar')
    vbox.pack_start(menu_bar, False)
    window.show_all()
    gtk.main()

class Signals(object):
  def set_window(self, window):
    self.__window = window
   
  def edit_prefs(self, widget, data=None):
    print 'Edit Preferences'
 
  def close(self, widget, data=None):
    gtk.main_quit()

if __name__ == '__main__':
  create_window_with_menus()

> P.S io conosco la lib tkinter ma da tutte le parti trovo scritto che non 
> esiste una traduzione è vero?
>   
Personalmente non ti so dire se esiste una traduzione della 
documentazione riguardante l'utilizzo di TKinter, ma ti so dire che c'e` 
un tutorial scritto da un italiano per PyGTK (anche se, a mio avviso, e` 
incompleto in alcune parti)

> grazie di tutto (mi avevano detto che il basic non era un gran che maq questo 
> è un casino!!)
>   
Il problema non e` dato dal fatto che Python e` un casino, ma che Python 
induce ad una metodologia differente di ragionare sul concetto di 
programmazione (e.g. programmazione funzionale e ad oggetti mischiata 
con programmazione imperativa, uso dell'indentazione per definire le 
strutture del programma, ecc.). Una volta fatta l'abitudine a questo, ti 
accorgerai che Python e` parecchio semplice (probabilmente - ma qui la 
dico e qui la nego - si potrebbe considerare il Pascal del 2000)

Enrico


Maggiori informazioni sulla lista Python