Qt, multiple inheritance: QApplication and new-style class not possible

S

Sibylle Koczian

I want to try out several applications, all doing the same thing but
using different GUI libraries (Tkinter, Qt, wxWindows). Using an example
I found in a book I wrote a class containing the GUI independent methods
of the application, let's call it MyAppClass. The book is written before
Python 2.2, so it uses classic classes, but I want some properties, so I
made MyAppClass a new style class.

For the Tkinter GUI I derive another class, TkAppClass, from this, whose
methods use Tkinter. As Qt applications need an application class
derived from QApplication, I wanted to derive my QAppClass from both
classes, QApplication and MyAppClass, but got a TypeError: "cannot
create a class derived from a SIP generated class (QApplication) and a
new-style class - use SIP v4 or later instead".

Now I see three different ways out of this:

a) use SIP v4, but it's pre-release. Moreover I'm just starting with
Linux anyway, so I'd like to keep to ready-made rpm packages for my
distribution (SuSE 9.1) and I can't find any.

b) make MyAppClass a classic class.

c) instead of deriving my QAppClass from QApplication and from
MyAppClass, derive it only from QApplication and put a reference to a
MyAppClass instance into it as an attribute.

What's the best way (and why), or is there a d)?

Thank you,
Koczian

--
Dr. Sibylle Koczian
Universitaetsbibliothek, Abt. Naturwiss.
D-86135 Augsburg

Tel.: (0821) 598-2400, Fax : (0821) 598-2410
e-mail : (e-mail address removed)-Augsburg.DE
 
J

John J. Lee

Sibylle Koczian said:
a) use SIP v4, but it's pre-release. Moreover I'm just starting with
[...]

I'd say the acceptability of this depends on what kinds of people the
program needs to be distributed to -- yourself being a special case of
distributee :) If I know I'll never distribute something, or won't
for, say, a year or so, I feel few qualms about using new code.
Depends what people have said about the stability of the code, of
course, but I'd be surprised if Phil Thompson's pre-release code was
bug-ridden.

Linux anyway, so I'd like to keep to ready-made rpm packages for my
distribution (SuSE 9.1) and I can't find any.

If you want to get into good habits, you could make your own rpm by
copying the spec files from old sip / PyQt packages -- it's not too
hard, I'm told.

Personally, I have slovenly habits and just compile from the original
tarball when it's not on a distro CD or automatically fetch-able with
dependencies (using apt-get, in my case).

b) make MyAppClass a classic class.

A shame to lose properties, assuming you have a good use for them.

c) instead of deriving my QAppClass from QApplication and from
MyAppClass, derive it only from QApplication and put a reference to a
MyAppClass instance into it as an attribute.

What's the best way (and why),

c). :)

or is there a d)?

Surely.


John
 
P

Phil Thompson

I want to try out several applications, all doing the same thing but
using different GUI libraries (Tkinter, Qt, wxWindows). Using an example
I found in a book I wrote a class containing the GUI independent methods
of the application, let's call it MyAppClass. The book is written before
Python 2.2, so it uses classic classes, but I want some properties, so I
made MyAppClass a new style class.

For the Tkinter GUI I derive another class, TkAppClass, from this, whose
methods use Tkinter. As Qt applications need an application class
derived from QApplication, I wanted to derive my QAppClass from both
classes, QApplication and MyAppClass, but got a TypeError: "cannot
create a class derived from a SIP generated class (QApplication) and a
new-style class - use SIP v4 or later instead".

Now I see three different ways out of this:

a) use SIP v4, but it's pre-release. Moreover I'm just starting with
Linux anyway, so I'd like to keep to ready-made rpm packages for my
distribution (SuSE 9.1) and I can't find any.

b) make MyAppClass a classic class.

c) instead of deriving my QAppClass from QApplication and from
MyAppClass, derive it only from QApplication and put a reference to a
MyAppClass instance into it as an attribute.

What's the best way (and why), or is there a d)?

I'd recommend a). The only reason SIP v4 is still a pre-release is that I said
that I'd only release the final version when the documentation was complete.
The code itself is stable with no known outstanding issues.

Phil
 
S

Sibylle Koczian

Phil said:
I'd recommend a). The only reason SIP v4 is still a pre-release is that I said
that I'd only release the final version when the documentation was complete.
The code itself is stable with no known outstanding issues.
In that case I think I'll try it, thank you!

--
Dr. Sibylle Koczian
Universitaetsbibliothek, Abt. Naturwiss.
D-86135 Augsburg

Tel.: (0821) 598-2400, Fax : (0821) 598-2410
e-mail : (e-mail address removed)-Augsburg.DE
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,025
Latest member
KetoRushACVFitness

Latest Threads

Top