Newer
Older
####################################################################################################
def _qInstallMessageHandler(handler):
'''Install a message handler that works in all bindings
Args:
handler: A function that takes 3 arguments, or None
'''
def messageOutputHandler(*args):
# In Qt5 bindings, message handlers are passed 3 arguments
# The first argument is a QtMsgType
# The last argument is the message to be printed
# The Middle argument (if passed) is a QMessageLogContext
if len(args) == 3:
msgType, logContext, msg = args
elif len(args) == 2:
msgType, msg = args
logContext = None
else:
raise TypeError(
'handler expected 2 or 3 arguments, got {0}'.format(len(args)))
if isinstance(msg, bytes):
# In python 3, some bindings pass a bytestring, which cannot be
# used elsewhere. Decoding a python 2 or 3 bytestring object will
# consistently return a unicode object.
msg = msg.decode()
handler(msgType, logContext, msg)
if not handler:
handler = messageOutputHandler
return Qt._QtCore.qInstallMessageHandler(handler)