Can you please specify *what line* this AttributeError is pointing at? On Wed, Sep 7, 2011 at 14:04, <ad...@mbnoimi.net> wrote:
> Hi guys, > > I wrote a tiny class for delaying splash screen in C++ but when I tired to > re-write it in python it didn't work! > > I got "AttributeError TeSplashScreen object has no attribut QFrate" > although TeSplashScreen inherited from QFrame > > Could you please help me, I'm still a newbie in PyQt and Python. > > tesplashscreen.py > > from PyQt4.QtCore import * > from PyQt4.QtGui import * > import sysclass TeSplashScreen(QFrame): > """ > Splash doc > """ > > app = QApplication(sys.argv) > sPixmap = QPixmap(10, 10) > sMessage = QString() > messages = ["nothing"] > sAlignment = 0 > sColor = QColor() > > def __init__(self, pixmap): > self.sPixmap = pixmap > self.QFrame(self, Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint) > self.setAttribute(Qt.WA_TranslucentBackground) > self.setFixedSize(sPixmap.size()) > > def clearMessage(self): > sMessage.clear() > repaint() > > def showMessage(self, theMessage, theAlignment, theColor): > self.sMessage = theMessage > self.sAlignment = theAlignment > self.sColor = theColor > repaint() > > def paintEvent(self, pe): > aTextRect(rect()) > aTextRect.setRect(aTextRect.x()+5, aTextRect.y()+5, > aTextRect.width()-10, aTextRect.height()-10) > aPainter = QPainter(self) > aPainter.drawPixmap(rect(), self.sPixmap) > aPainter.setPen(self.sColor) > aPainter.drawText(aTextRect, self.sAlignment, self.sMessage) > > def showSplash(self, delay, messages, alignment, color): > delay = 0 > self.messages = messages > alignment = 0 > color = QColor(color) > class SleeperThread(QThread): > msecs = 0 > QThread.msleep(msecs) > aSplashScreen = TeSplashScreen(self.sPixmap) > aSplashScreen.show > for i in range(len(messages)): > aSplashScreen.showMessage(messages[i], alignment, color) > SleeperThread.msleep(delay) > > # def showSplash(delay, messages, alignment, color): > # delay = 0 > # messages = QStringList() > # alignment = 0 > # color = QColor() > # class SleeperThread(QThread): > # msecs = 0 > # QThread.msleep(msecs) > # aSplashScreen = TeSplashScreen(sPixmap) > # aSplashScreen.show() > # for i in range(messages.count()): > # aSplashScreen.showMessage(messages[i], alignment, color) > # SleeperThread.msleep(delay) > > > tesplashscreen.h > > #ifndef TSPLASHSCREEN_H#define TSPLASHSCREEN_H > #include <QFrame>#include <QPainter>#include <QThread> > class TeSplashScreen : public QFrame > {public: > TeSplashScreen(const QPixmap& pixmap); > void showMessage(const QString& theMessage, int theAlignment = > Qt::AlignLeft, const QColor& theColor = Qt::black); > void showSplash(int delay, QStringList messages, int alignment = > Qt::AlignLeft, const QColor& color = Qt::black); > void showSplash(QList<int> delaies, int defaultDelay, QStringList > messages, int alignment = Qt::AlignLeft, const QColor& color = Qt::black); > private: > virtual void paintEvent(QPaintEvent* pe); > void clearMessage(); > QPixmap sPixmap; > QString sMessage; > int sAlignment; > QColor sColor; > }; > #endif // TSPLASHSCREEN_H > > > tesplashscreen.cpp > > #include "tesplashscreen.h" > TeSplashScreen::TeSplashScreen(const QPixmap& thePixmap) > : QFrame(0, Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint) > , sPixmap(thePixmap) > { > setAttribute(Qt::WA_TranslucentBackground); > setFixedSize(sPixmap.size()); > }; > void TeSplashScreen::clearMessage() > { > sMessage.clear(); > repaint(); > } > void TeSplashScreen::showMessage(const QString& theMessage, int theAlignment, > const QColor& theColor) > { > sMessage = theMessage; > sAlignment = theAlignment; > sColor = theColor; > repaint(); > } > void TeSplashScreen::paintEvent(QPaintEvent* pe) > { > QRect aTextRect(rect()); > aTextRect.setRect(aTextRect.x()+5, aTextRect.y()+5, aTextRect.width()-10, > aTextRect.height()-10); > > QPainter aPainter(this); > aPainter.drawPixmap(rect(), sPixmap); > aPainter.setPen(sColor); > aPainter.drawText(aTextRect, sAlignment, sMessage); > } > void TeSplashScreen::showSplash(int delay, QStringList messages, int > alignment, const QColor& color) > { > class SleeperThread : public QThread > { > public: > static void msleep(unsigned long msecs) {QThread::msleep(msecs);} > }; > > TeSplashScreen* aSplashScreen = new TeSplashScreen(sPixmap); > aSplashScreen->show(); > > for(int i=0; i<messages.count();++i) > { > aSplashScreen->showMessage(messages[i], alignment, color); > SleeperThread::msleep(delay); > } > > delete aSplashScreen; > } > void TeSplashScreen::showSplash(QList<int> delaies, int defaultDelay, > QStringList messages, int alignment, const QColor& color) > { > class SleeperThread : public QThread > { > public: > static void msleep(unsigned long msecs) {QThread::msleep(msecs);} > }; > > TeSplashScreen* aSplashScreen = new TeSplashScreen(sPixmap); > aSplashScreen->show(); > > for(int i=0; i<messages.count();++i) > { > aSplashScreen->showMessage(messages[i], alignment, color); > if(i<delaies.count()) > SleeperThread::msleep(delaies[i]); > else > SleeperThread::msleep(defaultDelay); > } > > delete aSplashScreen; > } > > > -- > Best Regards > Muhammad Bashir Al-Noimi > My Blog: http://mbnoimi.net > > > _______________________________________________ > PyQt mailing list PyQt@riverbankcomputing.com > http://www.riverbankcomputing.com/mailman/listinfo/pyqt > -- Nick Gaens
_______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt