Allora mettiamoci un menu (m0.py)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
class Example(wx.Frame):
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
menubar = wx.MenuBar()
fileMenu = wx.Menu()
fitem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')
menubar.Append(fileMenu, '&File')
self.SetMenuBar(menubar)
self.Bind(wx.EVT_MENU, self.OnQuit, fitem)
self.SetSize((300, 200))
self.Move((100, 50))
self.Show(True)
def OnQuit(self, e):
self.Close()
#main
app = wx.App()
Example(None, title = 'Simple menu')
app.MainLoop()
Con Ubuntu dovete tener conto di tre cose: un messaggio di errore quando chiudete e ricordate che con Unity la barra dei menu è globale e niente icone.I passi sono i seguenti:
creazione della barra dei menu con menubar = wx.MenuBar()
creazione di un menu: fileMenu = wx.Menu()
creazione di una voce (oggetto) di menu: fitem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')
dove il primo parametro è l'id dell'elemento (in questo caso quello standard di chiusura), il secondo la scritta che compare e il terzo il suggerimento (tooltip). Per aggiungerlo al menu usiamo Append() e per collegare il metodo da eseguire usiamo Bind(). Il carattere & sottolinea il carattere successivo e attiva la scorciatoia Alt+F.
Con Windows otterreste probabilmente qualcosa come questo:
Passiamo adesso a un caso più complesso: sottomenu e separatori (m1.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
# da ZetCode wxPython tutorial
import wx
class Example(wx.Frame):
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
self.InitUI()
def InitUI(self):
menubar = wx.MenuBar()
fileMenu = wx.Menu()
fileMenu.Append(wx.ID_NEW, '&New')
fileMenu.Append(wx.ID_OPEN, '&Open')
fileMenu.Append(wx.ID_SAVE, '&Save')
fileMenu.AppendSeparator()
imp = wx.Menu()
imp.Append(wx.ID_ANY, 'Import newsfeed list...')
imp.Append(wx.ID_ANY, 'Import bookmarks...')
imp.Append(wx.ID_ANY, 'Import mail...')
fileMenu.AppendMenu(wx.ID_ANY, 'I&mport', imp)
qmi = wx.MenuItem(fileMenu, wx.ID_EXIT, '&Quit\tCtrl+W')
fileMenu.AppendItem(qmi)
self.Bind(wx.EVT_MENU, self.OnQuit, qmi)
menubar.Append(fileMenu, '&File')
self.SetMenuBar(menubar)
self.SetSize((350, 250))
self.SetTitle('Submenu')
self.Centre()
self.Show(True)
def OnQuit(self, e):
self.Close()
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
ecco, il menu imp viene appeso al menufileMenu e diventa quindi un suo sottomenu.Ci sono ancora parecchie cose da dire sui menu (anche se a me non è che piacciano più di tanto tranne uno che tengo per ultimo) ma il discorso sarebbe troppo lungo. E poi è quasi festa, dai riprendiamo la prossima volta. E auguri.
Juhan
Vi ricordo che l'indice di "Mission Python" lo trovate qui.
Grazie.
RispondiElimina