By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,551 Members | 1,127 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,551 IT Pros & Developers. It's quick & easy.

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

P: n/a
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 : Si*************@Bibliothek.Uni-Augsburg.DE

Jul 18 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Sibylle Koczian <Si*************@Bibliothek.Uni-Augsburg.de> writes:
[...]
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
Jul 18 '05 #2

P: n/a
On Wednesday 12 May 2004 12:01 pm, Sibylle Koczian wrote:
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

Jul 18 '05 #3

P: n/a
Phil Thompson schrieb:
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.

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 : Si*************@Bibliothek.Uni-Augsburg.DE

Jul 18 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.