[PyKDE] a few issues

Gerard Vermeulen gerard.vermeulen at grenoble.cnrs.fr
Fri Jul 29 06:16:39 BST 2005


(1) (public) member data of class Foo does not show up in dir(Foo).
    This trips up tools like PyChecker and the standard library module
    inspect.py

(2) documentation bug: this concerns virtual member functions which
    have different C++ signatures in the inheritance tree of a class.
    Since I have reinvented something along the lines of the following
    hopefully self-explanatory example, I think it is good to document it:

#!/usr/bin/env python

import sys
from qt import *

class ScrollView(QScrollView):

    def __init__(self):
        QScrollView.__init__(self)
        self.resize(200, 200)
        self.resizeContents(10000, 10000)
        self.enableClipper(True)
        self.viewport().setBackgroundMode(QWidget.NoBackground)

        self.browser = QTextBrowser(self)
        self.browser.setText("""
Since the virtual C++ member function drawContents() is
overloaded in the inheritance tree of QScrollView, it may
be called as:

1. QFrame.drawContents(painter)
2. QScrollView.drawContents(painter, cx, cy, cw, ch)

Therefore, the Python reimplementation of drawContents()
must be able to handle 2 and 6 arguments.
""")

        self.addChild(self.browser, 100, 100)
        self.browser.resize(500, 300)
        self.browser.show()

    # __init__()

    # Since the virtual C++ member function drawContents() is overloaded
    # in the inheritance tree of QScrollView, it may be called as:
    # 1. QFrame.drawContents(painter)
    # 2. QScrollView.drawContents(painter, cx, cy, cw, ch)
    # Therefore, the Python reimplementation of drawContents() must be
    # able to handle 2 and 6 arguments.
    def drawContents(self, *args):
        if len(args) == 5:
            painter, cx, cy, cw, ch = args
            painter.fillRect(cx, cy, cw, ch, QBrush(QColor(40, 80, 0)))
        self.browser.repaint()

    # drawContents()

def main():
    app = QApplication(sys.argv)
    demo = ScrollView()
    app.setMainWidget(demo)
    demo.show()
    app.exec_loop()

# main()


if __name__ == '__main__':
    main()

# Local Variables: ***
# mode: python ***
# End: ***

    Feel free to add this to the PyQt examples.

(3) If I feed SIP a class with a protected nested class containing public
    data members, the code which tries to access the data members of the
    protected nested class does not compile (not urgent, but I prefer to
    see SIP complain instead of the compiler).


Gerard




More information about the PyQt mailing list