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 sys class 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