diff --git a/wx/py/introspect.py b/wx/py/introspect.py index 0bd1a5ca..e9c16b7f 100644 --- a/wx/py/introspect.py +++ b/wx/py/introspect.py @@ -3,6 +3,7 @@ things like call tips and command auto completion.""" __author__ = "Patrick K. O'Brien " +import re import sys import inspect import tokenize @@ -175,8 +176,11 @@ def getCallTip(command='', locals=None): pass elif inspect.isfunction(obj): # tip1 is a string like: "getCallTip(command='', locals=None)" - argspec = inspect.getargspec(obj) if not PY3 else inspect.getfullargspec(obj) - argspec = inspect.formatargspec(*argspec) + try: + argspec = str(inspect.signature(obj)) # PY35 or later + except AttributeError: + argspec = inspect.getargspec(obj) if not PY3 else inspect.getfullargspec(obj) + argspec = inspect.formatargspec(*argspec) if dropSelf: # The first parameter to a method is a reference to an # instance, usually coded as "self", and is usually passed @@ -211,7 +215,11 @@ def getCallTip(command='', locals=None): tip = '%s%s\n\n%s' % (tip1, tip2, tip3) else: tip = tip1 - calltip = (name, argspec[1:-1], tip.strip()) + # Extract argspec from the signature e.g., (x, /, *, ...) -> int + m = re.search(r'\((.*)\)', argspec) + if m: + argspec = m.group(1) + calltip = (name, argspec, tip.strip()) return calltip def getRoot(command, terminator=None):