• [^] # Re: petit bout de code

    Posté par . En réponse au message Un bel OSD en python ?. Évalué à 1.

    Pour ceux que ça intérresse : je mets une version bidouillée !
    Enfin, c'est du travail de sagouin mais ça marche quand même !

    Les différences par rapport à la version du dessus sont que l'osd s'affiche au dessus de toutes les autres fenêtres, n'apparait pas dans la barre des taches et est constitué d'une icone en plus !

    # -*- coding: utf-8 -*-
    import sys
    from qt import *

    class Osd(QWidget):
    def __init__(self,text,delay = 10000, posx = 100, posy = 100, icone ='kmaillight.png', color1 = QColor(0,0,0), color2 = QColor(240,240,240)):
    self.color1 = color1
    self.color2 = color2
    self.text = text
    self.icone = icone
    self.delay = delay

    self.posx = posx
    self.posy = posy
    parent = None
    name = 'Osd'
    flags = Qt.WStyle_Customize | Qt.WStyle_NoBorder | Qt.WStyle_StaysOnTop | Qt.WType_Popup
    QWidget.__init__(self,parent,name,flags)
    self.setWindowOpacity(0.0) # Ne fonctionne pas ! Une autre idée pour gérer la transparence ?
    self.setPaletteBackgroundColor(self.color2)
    self.move(self.posx, self.posy)
    self.setFixedSize(1,1)
    self.main()

    def main(self):

    self.show()
    QTimer.singleShot(self.delay,self.close)

    def paintEvent(self,qpe):
    p = QPainter()
    p.begin(self)
    p.setPen(QPen(self.color1,3))
    p.setFont(QFont('Helvetica',10,QFont.Normal))
    fm = p.fontMetrics()
    w = fm.width(self.text)
    h = fm.height()
    self.setFixedSize(w+50+32,42)

    imagefile = open(self.icone, 'r')
    imagedata = imagefile.read()
    image = QPixmap()

    image.loadFromData(imagedata, "PNG")

    p.drawPixmap(5,5,image)
    p.drawText(25+32,25,QString(self.text))
    p.drawRect(self.rect())

    p.end()


    if __name__ == '__main__':
    app = QApplication(sys.argv)
    osd = Osd('This is an osd')
    app.setMainWidget(osd)

    app.exec_loop()