Существовал так много подобных примеров на SO
import tkinter as tk
def callback(event):
print('e.get():', e.get())
# or more universal
print('event.widget.get():', event.widget.get())
# select text after 50ms
root.after(50, select_all, event.widget)
def select_all(widget):
# select text
widget.select_range(0, 'end')
# move cursor to the end
widget.icursor('end')
root = tk.Tk()
e = tk.Entry(root)
e.pack()
e.bind('<Control-a>', callback)
root.mainloop()
bind
ожидает имя файла без ()
и аргументов (обратного вызова). Но также bind
выполняет эту функцию всегда с одним аргументом event
, который дает доступ к записи, которая выполняет эту функцию event.widget
, поэтому вы можете использовать ее со многими различными записями. И, наконец, Entry
имеет .get()
, чтобы получить весь текст.
РЕДАКТИРОВАТЬ:
Поскольку после освобождения ключи <Control-a>
выбор будет удален поэтому я использую after()
, чтобы выполнить выбор после того, как 50 мс. Он выбирает весь текст (но он перемещает курсор в начало) и перемещает курсор в конец. (См код выше)
EDIT:
Прежде чем я не мог найти правильное сочетание с Release
, но он должен быть <Control-KeyRelease-a>
и теперь она не нуждается в after()
import tkinter as tk
def callback(event):
print('e.get():', e.get())
# or more universal
print('event.widget.get():', event.widget.get())
# select text
event.widget.select_range(0, 'end')
# move cursor to the end
event.widget.icursor('end')
root = tk.Tk()
e = tk.Entry(root)
e.pack()
e.bind('<Control-KeyRelease-a>', callback)
root.mainloop()
'bind' ожидает имя функции (обратный вызов) - это означает без'() 'и аргументов. Вы можете создать функцию без аргументов, которая использует вашу функцию с аргементами, или использовать lambda: 'bind (..., lambda: select_all (e1))' – furas
BTW: 'Entry' имеет метод' get() 'для получения всего текста. – furas