Я хочу создать всплывающую подсказку для каждой кнопки в моей программе. Но вместо того, чтобы связывать событие <'Enter'> в каждом виджете, я пытаюсь получить виджет под мышью в зависимости от его местоположения, затем получить его командную функцию и затем строку документации этой функции. Мне удалось получить имя функции с помощью widget.cget ("command"), но она возвращает имя функции в виде строки, поэтому, если после этого я использую команду do c, она дает мне документация для ул. Есть ли другой способ получить ссылку на эту функцию?
def get_widget_under_mouse(self):
x,y = self.master.winfo_pointerxy()
widget = self.master.winfo_containing(x,y)
print("widget:", widget)
try:
func = widget.cget("command")
print(func)
print(func.__doc__)
except:
pass
self.master.after(2000, self.get_widget_under_mouse)
Запустив код, при наведении курсора на кнопку, называемую функцией "OpenSelector", я получаю следующий вывод:
widget: .!panedwindow.!panedwindow2.!frame.!frame.!button
253330600Open_Selector
str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str
Create a new string object from the given object. If encoding or
errors is specified, then the object must expose a data buffer
that will be decoded using the given encoding and error handler.
Otherwise, returns the result of object.__str__() (if defined)
or repr(object).
encoding defaults to sys.getdefaultencoding().
errors defaults to 'strict'.