Scripting and Gnome and KDE

Boudewijn Rempt boud at rempt.xs4all.nl
Mon Apr 17 16:54:17 EDT 2000


Mitch Chapman <chapman at bioreason.com> wrote:

> In fact, I'd considered trying to write a similar article about PyQt
> and PyKDE.  But that article would have been even bleaker, because
> the process of discovery w. PyQt is still difficult for me.  I've
> had a few recurring problems.  Maybe this would be a good place to
> ask for enlightenment :)  I'll start w. the two biggies:
> 	o The Qt C++ interfaces include many overloaded functions.
> 	  Is there a consistent pattern for determining which of
> 	  these is implemented by the Python binding?  Or must
> 	  you look at the source code for the Python bindings?
> 	o In many cases, if I make a wrong guess as to which 
> 	  overloaded method is implemented by the binding, I get
> 	  a segmentation fault or (slightly better) a traceback 
> 	  indicating an incorrect argument type.  Is there an easy 
> 	  way to work backwards from a segmentation fault to
> 	  the correct usage for a PyQT widget?

Well, I've been working with PyQt and PyKDE for about year now, and I must
say I've never had that problem. Most overloaded functions differ in the
number of arguments, making it simple to determine which one is chosen;
as for the functions where the type of arguments is the only difference,
the bindings check the type of the arguments and choose the right
function:

The docs:

The QListViewItem class implements a list view item. More... 

Public Members

  * QListViewItem ( QListView * parent, const char *, const char * = 0,
const char * = 0, const char * = 0, const char * = 0, const char * = 0,
const char * = 0, const char * = 0 )  
  * QListViewItem ( QListViewItem * parent, const char *, const char * = 0,
const char * = 0, const char * = 0, const char * = 0, const char * = 0,
const char * = 0, const char * = 0 )  

Python code:
  listview=QListView(parent...)
  item1=QListViewItem(listview, "aaa")
	item2=QListViewItem(item1, "bbb")

Complete working example at:

  http://www.valdyas.org/python/overload.py

So the overloading problem doesn't exist at all ;-). No wonder I
hadn't noticed it. I wonder, how does wxPython handle this?

I haven't had many segfaults - mostly when trying out new features
in beta releases. 

>> Absolutely, but I don't know that an essay on the problems is exactly
>> the right way of introducing the toolkit.

> That's probably true.  Given the goal of showing how to do non-obvious
> things with a toolkit, what changes would you recommend?

Well, I'm not sure I saw any really non-obvious things - a treeview
isn't that spectacular nowadays, and neither is layout management.
(Although I must admit that I'd never thought that I would have to 
manually add scrolling to a treeview - that was very non-obvious to
me.)

> If I understand your comments, it would have been better to simply 
> say, "Here's how you do X," rather than to explain "Here's *why* you 
> do it this way".  I have one reservation with such an approach:

No, not exactly: what I look for in an introductory article is the
advantages of an approach. For instance, 'this toolkit has a really
easy and unique canvas', or 'writing a webbrowser in this toolkit takes
just 100 lines with toolbar and all', or 'this toolkit supports unicode
through-and-through' - showing off the really unique and interesting
things.

> it tells the reader how to solve a specific problem, but
> doesn't provide a general method for discovering how to use other
> parts of the toolkit.

I agree that that's useful. I spend a lot of time helping people
starting out with PyQt and PyKDE, showing them how to translate
the C++ documentation to Python. It's not difficult, just a mental
search-and-replace, but it's something one has to learn.

Besides, toolkits are different enough that migrating from one to
another often demands a complete new way of thinking: that's something
the article in Dr Dobbs did show: tkInter is one way of working,
PyQt another, but PyGTK is completely different once again. That's
an important insight, I feel.

-- 

Boudewijn Rempt  | http://www.valdyas.org



More information about the Python-list mailing list