Download: rctk_zk.tar.gz
If would like to know how to write rich
web applications in pure Python without any knowledge of Javascript,
CSS, HTML or Ajax then continue reading this post.
Take a look at the screen-shot. It is
the demo application of a framework called RCTK – which makes the
development of complex web applications as easy as desktop
applications. As the RCTK documentation puts it, the API has been
inspired by Tkinter. So if you are comfortable with Tkinter (or for
example wxPython), you don't have to be a web programmer to create
impressive web applications. Even though applications like the one in
the screen-shot are programmed in pure Python, RCTK still has to
render Javascript widgets in the browser, transparently to the
programmer of course. Currently, two different front-end tool-kits
are supported for this: Jquery (see demo) and Qooxdoo (see demo).
If you have just looked at the demos
you will be wondering why my screen-shot looks different. Not even
the creators of RCTK will fully recognise it. On the other hand, If
you have ever used the ZK Java framework then you will probably be
familiar with the “classic” blue colour theme and “Grid”
widget shown in the screen-shot. I have extracted the Javascript part
of ZK and added it to RCTK as an optional third front-end tool-kit. I
will contribute the source code to the RCTK project as soon as I can.
However, not all ZK components are available. For the moment, it is
limited to the current RCTK API. Hopefully, we will expand the API to
add other widgets, layouts and features such as border layout, html
editor, drag-and-drop and other ZK components. Take a look at the ZK demo to see what components are available.
Below you can see the source code for
the grid in the screen-shot. Simple !
class
Demo(object):
title
= "List"
description
= "Demonstrates the List control"
def
build(self, tk, parent):
parent.setLayout(GridLayout(rows=4,
columns=2))
parent.append(StaticText(tk,
"Single"))
parent.append(StaticText(tk,
"Multiple"))
grid
= Grid(tk,
[
Column('Inv.
No', width=55, sorttype=Column.INT),
Column('Date',
width=90, sorttype=Column.DATE),
Column('Amount',
width=80, sorttype=Column.FLOAT),
Column('Tax',
width=80, align=Column.RIGHT, sorttype=Column.FLOAT),
Column('Total',
width=80, align=Column.RIGHT, sorttype=Column.FLOAT),
Column('Notes',
width=150, sortable=False)
])
parent.append(grid,colspan=2)
for
i in range(0, 20):
grid.add((str(1000+i),
"2010-01-%d" % (i+1), str(i), str(i*10.19), str(i*1.19),
"Hello world, %d" % I))