Sembra che sia lanciata dal terminale parzialmente visibile a sinistra in basso. Uhm... che dite ci proviamo? Dai, non è difficile.
Solo un paio di avvertenze prima di partire.
1) Viene usato xdg-open; provate a digitare questo comando nel terminale. Dovrebbe esserci, in caso contrario mettete un commento.
2) Naturalmente funziona solo per Linux; esiste l'equivalente per Windows, se volete prossimamente ...
3) Io uso Firefox e Gedit, se usate di default un altro browser e editor per i testi naturalmente userà quelli.
4) Se da terminale do il comando xdg-open img.png e questa immagine esiste me la apre; se voglio aprirla in Gimp (sempre che sia installato) invece dovrò dare gimp img.png. Questo per chi volesse introdurre nuovi pulsanti nella ButtonBar.
OK, un'ultima cosa: ci servono le immagini per i pulsanti. Attenzione che devono avere tutte la stessa dimensione.
Dovete inserire:
- about.png
- atr.png
- exit.png
- goo.png
- memo.png
- okp.png
- tsou.png
Bene, ecco il codice per bb.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx, sys, os
posx = 777 #posizione finestra
posy = 25
tit = ''
def get_data():
global bcap, bico, bcmd
bcap = ['The Secrets of Ubuntu', 'Al Tamburo Riparato',
'OK, panico', 'Google', 'memo', 'about', 'exit']
bico = ['tsou.png', 'atr.png', 'okp.png', 'goo.png',
'memo.png', 'about.png', 'exit.png']
bcmd = ['http://parliamodi-ubuntu.blogspot.it',
'http://tamburoriparato.blogspot.it',
'http://okpanico.wordpress.com',
'http://google.com',
'*~/memo.txt',
'*about',
'*exit']
nele = len(bcap)
return nele
def open_memo(nome):
#print nome
nome = os.path.expanduser(nome)
# se si usa una variabile come $HOME mettere
# expandvars al posto di expanduser
#print nome
ex = os.path.isfile(nome)
#print ex
if not ex:
f = open(nome, 'w')
f.close()
ex = os.path.isfile(nome)
#print ex
if not ex:
msg = 'impossibile creare\n{0}'.format(nome)
wx.MessageBox(msg, 'Errore')
return()
os.system('xdg-open ' + nome)
class BBar(wx.Frame):
global bcap, bico, bcmd, nele
tit = 'la mia ButtonBar'
nele = get_data()
def __init__(self, parent, id, title):
global nele, tit, bcmd, bico, bcap
vert = True # cambiare se si vuole orizzontale
stile = wx.FRAME_NO_TASKBAR
wx.Frame.__init__(self, parent, id, title = tit, style = stile)
if vert:
self.toolbar = self.CreateToolBar(wx.TB_VERTICAL)
else:
self.toolbar = self.CreateToolBar()
for c in range(nele):
t = bico[c]
cap = bcap[c]
self.toolbar.AddLabelTool(c, '', wx.Bitmap(t), shortHelp = cap)
self.SetSize(self.toolbar.GetSize())
self.toolbar.Realize()
for c in range(nele):
self.Bind(wx.EVT_TOOL, self.OnClick, id = c)
self.SetPosition(wx.Point(posx, posy))
self.Show(True)
def OnClick(self, event):
ele = event.GetId()
#print ele
#print bcap[ele]
#print bico[ele]
#print bcmd[ele]
cmd = bcmd[ele]
# casi speciali, bcmd inizia con *
if cmd[0] == '*':
cmd = cmd[1:] #tolgo *
#print '***************', cmd
if 'memo' in cmd:
open_memo(cmd) #devo verificare se c'è
elif cmd == 'about':
msg = '{0}\n{1}\n{2}\n{3}'.format(
'The Secrets of Ubuntu',
'di tutto di più',
'by Bit3Lux & Juhan',
'v. 0.0')
wx.MessageBox(msg, 'La mia ButtonBar')
elif cmd == 'exit':
sys.exit(0)
else: # cmd normale, senza * iniziale
os.system('xdg-open ' + cmd)
#main
app = wx.App()
BBar(None, -1, '')
app.MainLoop()
Come vedete ho lasciato (come commenti) i print usati in fase di costruzione per chi volesse ravanarci su. E poi visto com'è semplice? tutto si riduce a creare un frame con stile
wx.FRAME_NO_TASKBAR all'interno del quale mettere una toolbar. Popolo la toolbar con i pulsanti e la finestra è fatta.
A ogni pulsante assegno un id che userò nel metodo OnClick() per identificarlo. A questo punto non resta che usare os.system(), tranne nei casi particolari, quelli in cui bcmd inizia con *.
"Elementare Watson!", direbbe il mio amico Sherlock. Vero? O no?
L'ormai mitico Juhan!
Vi ricordo, come al solito, che esiste anche l'indice di "Mission Python"
Alla prossima!!!
Nessun commento:
Posta un commento