wxPython Grid JSON
Negli articoli precedenti abbiamo visto come ottenere dati in formato JSON da un web service, e come creare una wxPython Grid.
Partendo da quegli articoli vediamo come riempire una Grid perndendo in dati in formato JSON.
Partiamo dalla classe che interroga il web service:
import httplib
import jsonclass Service(object):
conn = None
def __init__(self):
self.conn = httplib.HTTPConnection("www.miosito.it")
def listLogFile(self):
self.conn.request(method = "GET", url = "/service/log.php", headers = { "Content-Type": "application/json" })
res = self.conn.getresponse()
data = json.loads(res.read())
tabella = []
for i in data:
list = []
list.append(i["nome"])
list.append(i["data"])
tabella.append(list)
self.conn.close()
return tabella
Fino a qua nulla di nuovo.
Vediamo adesso il Frame con la Grid:
import wx
import wx.grid as gl
from Service import *
from FrameDetail import *class MainFrame(wx.Frame):
s = Service()def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, title = "Cimoda Log", size = (800, 800), style = wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER)
panel = wx.Panel(self, wx.ID_ANY)
randomId = wx.NewId()
self.Bind(wx.EVT_MENU, self.closeProgram, id = randomId)
closeAccelTbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('Q'), randomId)])
self.SetAcceleratorTable(closeAccelTbl)
data = self.s.listLogFile()
cols = 3self.gl = gl.Grid(panel, pos = (30, 20))
self.riempiGrid(data, cols)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.gl, 2, wx.EXPAND)
panel.SetSizer(self.sizer)def riempiGrid(self, data, cols):
colLabels = [ "Nome", "Data", "Elimina" ]
listNomi, listData = zip(*data)
self.gl.CreateGrid(len(data), cols)
self.gl.SetColSize(0, 300)
self.gl.SetColSize(1, 300)
self.Bind(gl.EVT_GRID_CELL_RIGHT_DCLICK, self.gridDoubleClick)
self.Bind(gl.EVT_GRID_CELL_LEFT_DCLICK, self.gridDoubleClick)
for col in range(cols):
self.gl.SetColLabelValue(col, colLabels[col])
self.gl.AutoSizeColumn(2)
for row in range(len(data)):
self.gl.SetCellValue(row, 0, listNomi[row])
self.gl.SetCellValue(row, 1, listData[row])
#self.gl.SetCellValue(row, 3, wx.CheckBox(self.gl))
self.gl.SetReadOnly(row, 0, True)
self.gl.SetReadOnly(row, 1, True)
def closeProgram(self, event):
self.Close()
app = wx.App()
f = MainFrame()
f.Show()
f.Center()
app.MainLoop()
Il tutto sta nel metodo riempiGrid, al quale passiamo i dati e le colonne.
I dati che ci arrivano dal metodo listLogFile sono già praticamente intabellati, quindi ce la caviamo con poco.
Ciao!
python wxwidget wxpython frame grid web service json
1 Commenti
Ciao, prima di tutto grazie dei tuoi esempi, sono chiari ed essenziali ;) Volevo provare questo script, ma non riesco a trovare il modulo Service da installare, mi sai indicare dove posso trovarlo? Grazie Ciao
04/10/2016