domenica 27 gennaio 2013

Widgets avanzati

Salve!

Come certo saprete per la parte grafica questo corso utilizza un sito meraviglioso wxWidgets tutorial di ZetCode

http://www.zetcode.com/

dove si parla di tante cose, noi siamo al momento interessati a Python ma in futuro chissà ...


E dopo due post sui widgets "normali" il tutorial ci propone una pagina di "Advanced widgets". Ecco, non so se interessano; l'idea era di dare alcune dritte per farvi scoprire cosa si può fare, cose semplici. Poi se qualcuno è interessato può approfondire. Il bello è proprio quando uno arriva a dire "Ah!" e scopre di essere diventato più bravo (saputo) del proprio maestro. Altrimenti è solo un ripetere (Ipse dicit) e non c'è avvanzamento.

Tutto ciò premesso eccone uno, il primo, wx.ListBox (lb.py), gli altri tutti per voi!
#!/usr/bin/python

import wx

ID_NEW = 1
ID_RENAME = 2
ID_CLEAR = 3
ID_DELETE = 4

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

        panel = wx.Panel(self, -1)
        hbox = wx.BoxSizer(wx.HORIZONTAL)

        self.listbox = wx.ListBox(panel, -1)
        hbox.Add(self.listbox, 1, wx.EXPAND | wx.ALL, 20)

        btnPanel = wx.Panel(panel, -1)
        vbox = wx.BoxSizer(wx.VERTICAL)
        new = wx.Button(btnPanel, ID_NEW, 'New', size=(90, 30))
        ren = wx.Button(btnPanel, ID_RENAME, 'Rename', size=(90, 30))
        dlt = wx.Button(btnPanel, ID_DELETE, 'Delete', size=(90, 30))
        clr = wx.Button(btnPanel, ID_CLEAR, 'Clear', size=(90, 30))

        self.Bind(wx.EVT_BUTTON, self.NewItem, id=ID_NEW)
        self.Bind(wx.EVT_BUTTON, self.OnRename, id=ID_RENAME)
        self.Bind(wx.EVT_BUTTON, self.OnDelete, id=ID_DELETE)
        self.Bind(wx.EVT_BUTTON, self.OnClear, id=ID_CLEAR)
        self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnRename)

        vbox.Add((-1, 20))
        vbox.Add(new)
        vbox.Add(ren, 0, wx.TOP, 5)
        vbox.Add(dlt, 0, wx.TOP, 5)
        vbox.Add(clr, 0, wx.TOP, 5)

        btnPanel.SetSizer(vbox)
        hbox.Add(btnPanel, 0.6, wx.EXPAND | wx.RIGHT, 20)
        panel.SetSizer(hbox)

        self.Centre()
        self.Show(True)

    def NewItem(self, event):
        text = wx.GetTextFromUser('Enter a new item', 'Insert dialog')
        if text != '':
            self.listbox.Append(text)

    def OnRename(self, event):
        sel = self.listbox.GetSelection()
        text = self.listbox.GetString(sel)
        renamed = wx.GetTextFromUser('Rename item', 'Rename dialog', text)
        if renamed != '':
            self.listbox.Delete(sel)
            self.listbox.Insert(renamed, sel)

    def OnDelete(self, event):
        sel = self.listbox.GetSelection()
        if sel != -1:
            self.listbox.Delete(sel)

    def OnClear(self, event):
        self.listbox.Clear()

app = wx.App()
ListBox(None, -1, 'ListBox')
app.MainLoop()
Ecco bastano una settantina di righe. E fa tutto il package wx!

Date un'occhiata anche agli altri esempi, li trovate qui

http://www.zetcode.com/wxpython/advanced/

Non li riporto perché il codice sarebbe lungo ma dentro non c'è niente di difficile. Anche quando si parla di HTML. Sì, con Python si può!

Juhan

Il corso di Python sta andando avanti. Vi sta piacendo? Non vi sta piacendo? E' Facile? E' difficile? Volete collaborare? Ecco, ci farebbe tanto piacere conoscere qualche risposta. :)

Il caro Juhan gestisce due blog. Uno lo conoscete di sicuro, e non può essere diversamente, mi riferisco al portentoso Ok, panico. L'altro, Al Tamburo Riparato, merita di essere visitato prima di subito, infatti è più che portentoso. Che poi pure io ne sono diventato un collaboratore. Vedete? qui. :))

Nessun commento:

Posta un commento