eEcho blog

is een halte van de gedachte

Menus wxPython

Menus

Een menubalk is een van de meest zichtbare onderdelen van de GUI applicatie. Het is een groep van commando’s in de verschillende menu’s. Terwijl in de console toepassingen die u had om te onthouden al die mysterieuze commando’s, hier hebben we het grootste deel van de commando’s gegroepeerd. Voor de uitvoering van een menubalk in wxPython moeten er drie dingen. Een wx.MenuBar, een wx.Menu en een wx.MenuItem.

Een eenvoudig voorbeeld menu

simplemenu.png
Het maken van een menubalk in wxPython is heel eenvoudig. Nog maar een paar regels code.

#!/usr/bin/python

# simplemenu.py

import wx

class SimpleMenu(wx.Frame):
    def __init__(self, parent, id, title):
       wx.Frame.__init__(self, parent, id, title, size=(250, 150))

       menubar = wx.MenuBar()
       file = wx.Menu()
       file.Append(-1, 'Quit', 'Quit application')
       menubar.Append(file, '&File')
       self.SetMenuBar(menubar)

       self.Centre()
       self.Show(True)

app = wx.App()
SimpleMenu(None, -1, 'simple menu example')
app.MainLoop()

dockable menubalk

Onder Linux, kunnen we een dockable menubalk maken. Deze functie is niet beschikbaar in windows toepassingen. Maar soortgelijke ding kunnen we in Mac OS zien. De menubalk is uitgevoerd buiten het hoofdvenster.
dockable.jpg

#!/usr/bin/python

# dockable.py

import wx

class Dockable(wx.Frame):
    def __init__(self, parent, id, title):
       wx.Frame.__init__(self, parent, id, title)

       menubar = wx.MenuBar(wx.MB_DOCKABLE)
       file = wx.Menu()
       edit = wx.Menu()
       view = wx.Menu()
       insr = wx.Menu()
       form = wx.Menu()
       tool = wx.Menu()
       help = wx.Menu()

       menubar.Append(file, '&File')
       menubar.Append(edit, '&Edit')
       menubar.Append(view, '&View')
       menubar.Append(insr, '&Insert')
       menubar.Append(form, '&Format')
       menubar.Append(tool, '&Tools')
       menubar.Append(help, '&Help')
       self.SetMenuBar(menubar)

       self.Centre()
       self.Show(True)

app = wx.App()
Dockable(None, -1, 'Dockable menubar')
app.MainLoop()


Iconen, snelkoppelingen, events

In het volgende gedeelte zullen we de verdere verbetering van onze menu voorbeeld. We zullen zien, hoe we iconen toe kunnen voegen aan onze menu’s. Pictogrammen geven aan onze verzoeken meer visueel aantrekkelijkheid. Tevens geven zij ons meer inzicht in het menu commando’s. We zullen zien, hoe we het kunnen toevoegen snelkoppelingen naar onze menu’s. Zij stellen ons in staat sneller te werken met onze applicaties. Een van de meest gebruikte is de sneltoets Ctrl + S (Opslaan). Het is handig om sneltoets te gebruikten dan zoeken iets in menu om te klikken.

menuexample.png

#!/usr/bin/python

# menuexample.py

import wx

class MenuExample(wx.Frame):
    def __init__(self, parent, id, title):
       wx.Frame.__init__(self, parent, id, title, size=(250, 150))

       menubar = wx.MenuBar()
       file = wx.Menu()
       quit = wx.MenuItem(file, 1, '&Quit\tCtrl+Q')
       quit.SetBitmap(wx.Bitmap('icons/exit.png'))
       file.AppendItem(quit)

       self.Bind(wx.EVT_MENU, self.OnQuit, id=1)

       menubar.Append(file, '&File')
       self.SetMenuBar(menubar)

       self.Centre()
       self.Show(True)

    def OnQuit(self, event):
       self.Close()

app = wx.App()
MenuExample(None, -1, '')
app.MainLoop()

Submenus

Elk menu kan ook een submenu bevatten. Op deze manier kunnen wij soortgelijke commnads groeperen. Zo kunnen we plaats commando’s die tonen / verbergen verschillende toolbars, zoals persoonlijke bar, adresbalk, status bar of navigatiebalk in een submenu inwerken. Binnen een menu, kunnen we commando’s scheiden met een separator.
submenu.png

#!/usr/bin/python

# submenu.py

import wx

ID_QUIT = 1

class SubmenuExample(wx.Frame):
    def __init__(self, parent, id, title):
       wx.Frame.__init__(self, parent, id, title, size=(350, 250))

       menubar = wx.MenuBar()

       file = wx.Menu()
       file.Append(-1, '&New')
       file.Append(-1, '&Open')
       file.Append(-1, '&Save')
       file.AppendSeparator()

       imp = wx.Menu()
       imp.Append(-1, 'Import newsfeed list…')
       imp.Append(-1, 'Import bookmarks…')
       imp.Append(-1, 'Import mail…')

       file.AppendMenu(-1, 'I&mport', imp)

       quit = wx.MenuItem(file, ID_QUIT, '&Quit\tCtrl+W')
       quit.SetBitmap(wx.Bitmap('icons/exit.png'))
       file.AppendItem(quit)

       self.Bind(wx.EVT_MENU, self.OnQuit, id=ID_QUIT)

       menubar.Append(file, '&File')
       self.SetMenuBar(menubar)

       self.Centre()
       self.Show(True)

    def OnQuit(self, event):
       self.Close()

app = wx.App()
SubmenuExample(None, -1, 'Submenu')
app.MainLoop()

Diverse menu-items

Er zijn drie soorten menu-items.

* Normale post
* Controleer item
* Radio-item

checkmenuitem.png

#!/usr/bin/python

# checkmenuitem.py

import wx

ID_STAT = 1
ID_TOOL = 2

class CheckMenuItem(wx.Frame):
    def __init__(self, parent, id, title):
       wx.Frame.__init__(self, parent, id, title, size=(350, 250))

       menubar = wx.MenuBar()
       file = wx.Menu()
       view = wx.Menu()
       self.shst = view.Append(ID_STAT, 'Show statubar', 'Show Statusbar', kind=wx.ITEM_CHECK)
       self.shtl = view.Append(ID_TOOL, 'Show toolbar', 'Show Toolbar', kind=wx.ITEM_CHECK)
       view.Check(ID_STAT, True)
       view.Check(ID_TOOL, True)

       self.Bind(wx.EVT_MENU, self.ToggleStatusBar, id=ID_STAT)
       self.Bind(wx.EVT_MENU, self.ToggleToolBar, id=ID_TOOL)

       menubar.Append(file, '&File')
       menubar.Append(view, '&View')
       self.SetMenuBar(menubar)

       self.toolbar = self.CreateToolBar()
       self.toolbar.AddLabelTool(3, '', wx.Bitmap('icons/quit.png'))

       self.statusbar = self.CreateStatusBar()
       self.Centre()
       self.Show(True)

    def ToggleStatusBar(self, event):
       if self.shst.IsChecked():
            self.statusbar.Show()
       else:
            self.statusbar.Hide()

    def ToggleToolBar(self, event):
       if self.shtl.IsChecked():
            self.toolbar.Show()
       else:
            self.toolbar.Hide()

app = wx.App()
CheckMenuItem(None, -1, 'check menu item')
app.MainLoop()


Context menu

Het is een lijst van commando’s die onder bepaalde context. Bijvoorbeeld, in een Firefox webbrowser, wanneer we klikken met de rechtermuisknop op een webpagina, dan krijgen we een context menu. Hier kunnen we opnieuw laden van een pagina, ga terug of bekijk de pagina bron. Als we klikken met de rechtermuisknop op een werkbalk, dan krijgen we een andere context-menu voor het beheer van de werkbalken. Context menu’s worden ook wel pop-up menu’s genoemd.

#!/usr/bin/python

# contextmenu.py

import wx

class MyPopupMenu(wx.Menu):
    def __init__(self, parent):
       wx.Menu.__init__(self)

       self.parent = parent

       minimize = wx.MenuItem(self, wx.NewId(), 'Minimize')
       self.AppendItem(minimize)
       self.Bind(wx.EVT_MENU, self.OnMinimize, id=minimize.GetId())

       close = wx.MenuItem(self, wx.NewId(), 'Close')
       self.AppendItem(close)
       self.Bind(wx.EVT_MENU, self.OnClose, id=close.GetId())

    def OnMinimize(self, event):
       self.parent.Iconize()

    def OnClose(self, event):
       self.parent.Close()

class ContextMenu(wx.Frame):
    def __init__(self, parent, id, title):
       wx.Frame.__init__(self, parent, id, title, size=(250, 150))

       self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)

       self.Center()
       self.Show()

    def OnRightDown(self, event):
       self.PopupMenu(MyPopupMenu(self), event.GetPosition())

app = wx.App()
frame = ContextMenu(None, -1, 'context menu')
app.MainLoop()

Comments are closed.

Home | info@eecho.info | Voorwaarden | Blog