GUI Python interfaces and DataGrids
Maan Hamze
mmhamze at pleiades.net
Sat Aug 25 17:12:24 EDT 2001
Thanks Joseph. This is what I had in mind (or something along these lines)
by way of doing my own grid for a dataset.
Maan
"Joseph Andrew Knapka" <jknapka at earthlink.net> wrote in message
news:3B87B147.A810DCC3 at earthlink.net...
> Boudewijn Rempt wrote:
> >
> > Maan Hamze <mmhamze at pleiades.net> wrote:
> > > Unless I am missing something, I have looked and I Tkinter does not
seem to
> > > have a DataGrid to receive the rows of a query (a dataset) and display
them
> > > or to bind it into a dataset. There is the Python DB API after all.
So I
> > > believe the issue of Datasets should be standardized across the
different
> > > database packages.
> > > Now, I believe I have an idea on how to build a class and use it in
Python
> > > that can do exactly this.
> > > But does Tkinter have a DataGrid? If not, are there any other GUI
Python
> > > packages that come with a DataGrid?
> >
> > Not if you mean a ready-made data-aware grid control like Visual Basic
> > has. You'll have to roll your own. One problem is that Tkinter, to the
> > best of my knowledge doesn't have a grid control at all.
>
> True, but the grid layout manager makes it extremely easy
> to create one.
>
> from Tkinter import *
>
> class SequenceGridException:
> pass
>
> class SequenceGrid(Frame):
>
> def __init__(self,parent,**kw):
> Frame.__init__(self,parent,**kw)
> self.fields = []
> self.rows = 0
> self.cols = 0
>
> def setRows(self,rows):
> self.rows = 0
> self.cols = 0
>
> for field in self.fields:
> field.grid_forget()
> field.destroy()
> self.fields = []
>
> for row in rows:
> self.cols = 0
> for item in row:
> txt = str(item)
> field = Text(self,height=1,width=len(txt))
> field.insert("1.0",txt)
> field.grid(row=self.rows,col=self.cols,sticky="nsew")
> self.fields.append(field)
> self.cols += 1
> self.rows += 1
>
> def getItem(self,row,col):
> if row < 0 or col < 0 or row >= self.rows or col >= self.cols:
> raise SequenceGridException
> idx = row * self.cols + col
> return self.fields[idx].get("1.0","end")
>
> # Test code:
> test = 0
> data =
> [["Hello","world",42],["I","love","Python!"],["Tkinter","rocks","the
> house!"]]
>
> def fill():
> global test, data
> try:
> print "1,2 is %s"%sg.getItem(1,2)
> except:
> print "Oops, no data in grid 1,2"
> sg.setRows(data)
> data.append(["New","row",test])
> test += 1
>
> if __name__ == "__main__":
> root = Tk()
> sg = SequenceGrid(root,width=100,height=100)
> sg.grid(sticky="nsew")
> btn = Button(command=fill,text="Fill grid")
> btn.grid()
> root.mainloop()
>
> [snip]
>
>
>
> > I know that
> > both wxPython and PyQt have a good grid control, and filling a table
> > yourself from the results of a query is easy enough, and gives you a
> > lot of flexibility. In fact, at the last VB shop where I worked, use
> > of data-aware controls was forbidden: we had to fill the grids
> > ourselves anyway.
> >
> > --
> >
> > Boudewijn Rempt | http://www.valdyas.org
>
> --
> # Joe Knapka
> # "You know how many remote castles there are along the
> # gorges? You can't MOVE for remote castles!" - Lu Tze re. Uberwald
> # Linux MM docs:
> http://home.earthlink.net/~jknapka/linux-mm/vmoutline.html
More information about the Python-list
mailing list