Quando vogliamo sapere se un'opzione è attiva o no e vogliamo gestirla con un menu possiamo usare i check menu, eccone un esempio (chm.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
# da ZetCode wxPython tutorial
# www.zetcode.com
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()
viewMenu = wx.Menu()
self.shst = viewMenu.Append(wx.ID_ANY, 'Show statubar',
'Show Statusbar', kind=wx.ITEM_CHECK)
self.shtl = viewMenu.Append(wx.ID_ANY, 'Show toolbar',
'Show Toolbar', kind=wx.ITEM_CHECK)
viewMenu.Check(self.shst.GetId(), True)
viewMenu.Check(self.shtl.GetId(), True)
self.Bind(wx.EVT_MENU, self.ToggleStatusBar, self.shst)
self.Bind(wx.EVT_MENU, self.ToggleToolBar, self.shtl)
menubar.Append(fileMenu, '&File')
menubar.Append(viewMenu, '&View')
self.SetMenuBar(menubar)
self.toolbar = self.CreateToolBar()
self.toolbar.AddLabelTool(1, '', wx.Bitmap('texit.png'))
self.toolbar.Realize()
self.statusbar = self.CreateStatusBar()
self.statusbar.SetStatusText('Ready')
self.SetSize((350, 250))
self.SetTitle('Check menu item')
self.Centre()
self.Show(True)
def ToggleStatusBar(self, e):
if self.shst.IsChecked():
self.statusbar.Show()
else:
self.statusbar.Hide()
def ToggleToolBar(self, e):
if self.shtl.IsChecked():
self.toolbar.Show()
else:
self.toolbar.Hide()
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
Per la visualizzazione della toolbar vi serve un file, texit.png, propongo questo ma va bene qualunque, non troppo grandeAllora: dopo aver definito il menu viewMenu, come nel post precedente aggiungiamo le voci di menu shst e shtl con l'opzione wx.ITEM_CHECK. Con il metodo Check definiamo inoltre che siano visibili al lancio dell'applicazione. IsChecked() serve a controllare l'opzione è attiva, vedi i metodi ToggleStatusBar e ToggleTooBar. È molto più facile farla che raccontarla, vi conviene esaminare da soli il codice, dai è corto e facile.
A me personalmente i menu non piacciono, tranne un tipo: il context menu, quello che si attiva normalmente con il tasto destro del mouse. Ecco un esempio (td.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
# da ZetCode wxPython tutorial
# www.zetcode.com
import wx
class MyPopupMenu(wx.Menu):
def __init__(self, parent):
super(MyPopupMenu, self).__init__()
self.parent = parent
mmi = wx.MenuItem(self, wx.NewId(), 'Minimize')
self.AppendItem(mmi)
self.Bind(wx.EVT_MENU, self.OnMinimize, mmi)
cmi = wx.MenuItem(self, wx.NewId(), 'Close')
self.AppendItem(cmi)
self.Bind(wx.EVT_MENU, self.OnClose, cmi)
def OnMinimize(self, e):
self.parent.Iconize()
def OnClose(self, e):
self.parent.Close()
class Example(wx.Frame):
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
self.InitUI()
def InitUI(self):
self.Bind(wx.EVT_RIGHT_UP, self.OnRightDown)
self.SetSize((250, 200))
self.SetTitle('Context menu')
self.Centre()
self.Show(True)
def OnRightDown(self, e):
self.PopupMenu(MyPopupMenu(self), e.GetPosition())
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
In questo caso il menu MyPopupMenu viene creato come classe e attivato nel frame Example con Bind. Notare che il metodo è wx.EVT_RIGHT_DOWN, potete usare UP al posto di DOWN ma non cambia molto.Se l'applicazione è semplice invece del menu io preferisco le toolbar. Un esempio completo di toolbar verrà sviluppato in un prossimo post, per adesso solo un assaggio (tbar.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-
# da ZetCode wxPython tutorial
# www.zetcode.com
import wx
class Example(wx.Frame):
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
self.InitUI()
def InitUI(self):
toolbar = self.CreateToolBar()
qtool1 = toolbar.AddLabelTool(wx.ID_ANY, 'Prova', wx.Bitmap('tprova.png'))
qtool2 = toolbar.AddLabelTool(wx.ID_ANY, 'Quit', wx.Bitmap('texit.png'))
toolbar.Realize()
self.Bind(wx.EVT_TOOL, self.OnQuit, qtool2)
self.SetSize((250, 200))
self.SetTitle('Simple toolbar')
self.Centre()
self.Show(True)
def OnQuit(self, e):
self.Close()
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
vi serve un altro file tprova.png. Notare che la toolbar viene automaticamente dimensionata per contenere l'immagine più grande; conviene quindi averle tutte di dimensioni uguali o quasi.Juhan
L'indice del progetto "Mission Python" lo trovate qui.
Non ci resta che augurarvi BUON ANNO!!
E alla prossima!
Nessun commento:
Posta un commento