Удалить символ слева от курсора в виджете ввода Tkinter в python 3

Я хочу сделать программу, в которой, когда я нажимаю кнопку, она очищает символ, оставленный курсором, из виджета ввода.

вот что я пробовал:

import tkinter as tk


def clear_one(entry_field):
    from tkinter import END
    current = entry_field.get()
    current = str(current)
    cleared = current[:-1]
    entry_field.delete(0, END)
    entry_field.insert(0, cleared)


root = tk.Tk
e = tk.Entry()
e.grid(row=0, column=0)
e.focus()

b = tk.Button(text="Clear", command=lambda: clear_one(e))
b.grid(row=1, column=0)

tk.mainloop()

Он просто удаляет последний символ в виджете ввода, и когда я перемещаю курсор в другую позицию и нажимаю кнопку, он все равно удаляет последний символ в виджете ввода.

Но я хочу, чтобы он удалил символ, оставшийся до курсора.

Я не нашел подходящего решения в Интернете, и, возможно, я не смог их понять, поскольку я новичок в программировании.

Кто-нибудь может мне с этим помочь?


person Daniyal Ahmad    schedule 29.12.2019    source источник
comment
Используйте cursor_position = entry_field.index(tk.INSERT), Entry.index-method   -  person stovfl    schedule 29.12.2019


Ответы (1)


Если вы хотите удалить символ слева от курсора, определите позицию курсора, вычтите единицу, а затем удалите этот символ.

def clear_one(entry_field):
    insert = entry_field.index("insert")
    entry_field.delete(insert-1)
person Bryan Oakley    schedule 29.12.2019
comment
Я попробую, сэр. - person Daniyal Ahmad; 30.12.2019
comment
Спасибо, сэр, все работает отлично. Не могли бы вы объяснить мне о insert? Потому что я никогда не использовал его раньше, так как я новичок в программировании. - person Daniyal Ahmad; 30.12.2019
comment
@DaniyalAhmad: строка "insert" является частным случаем индекса, поддерживаемого виджетом Entry. Это относится к местоположению курсора вставки. - person Bryan Oakley; 30.12.2019
comment
Спасибо, сэр, теперь я понял. - person Daniyal Ahmad; 30.12.2019