Bonjour,

Dans le cadre d'un développement en PyQt4 utilisant QtWebKit.QWebView, j'avais en chargeant certains sites, par exemple celui d'adobe, un message d'alerte (warning) sur la console du genre:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
QFont::setPixelSize: Pixel size <= 0 (0)
Bon. Ce n'est pas grave, ce n'est qu'un warning. Mais c'est irritant parce que c'est inutile. Et si on diffuse le programme, cela peut jeter un doute sur le sérieux du développement.

Alors, j'ai cherché comment éviter cela. J'ai bien trouvé quelques exemples en cpp, mais pas en Python. J'ai fini par mettre au point une solution: le code suit (Python 2.7 - PyQt4):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
from PyQt4 import QtCore, QtGui
 
def messagederreur(msgtyp, msg):
    """permet d'afficher ou non dans la console les messages d'erreur de Qt
       mise en place par: QtCore.qInstallMsgHandler(messagederreur)
    """ 
    if msgtyp==QtCore.QtDebugMsg:
        print("Debug: %s\n" % (msg,))
 
    elif msgtyp==QtCore.QtWarningMsg:
        # exemple de désactivation d'un message donné par QWebKit.QWebView
        if msg!="QFont::setPixelSize: Pixel size <= 0 (0)":
            print("Warning: %s\n" % (msg,))
 
    elif msgtyp==QtCore.QtCriticalMsg:
        print("Critical: %s\n" % (msg,))
 
    elif msgtyp==QtCore.QtFatalMsg:
        print("Fatal: %s\n" % (msg))
        sys.exit()
On installe le traitement des messages au début de l'exécution par:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
QtCore.qInstallMsgHandler(messagederreur)
Ceci au tout début du lancement de la bibliothèque (app = QtGui.QApplication(sys.argv))

Et ce message de warning disparait de la console.

On peut, bien sûr, adapter le code pour neutraliser d'autres messages de warning, voire tous, mais il faut bien réfléchir avant, parce que certains messages nécessitent effectivement des corrections du code.

Cela devrait aussi fonctionner en Python 3.x. Je n'ai pas essayé en PySide, mais comme c'est une machinerie de Qt, je suppose que ça marchera aussi. Quand à Qt5: à voir.