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:
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):
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:
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.
Partager