Как заменить функции get(), insert() и delete() из tk.Запись в canvas.create_text?

#python #python-3.x #tkinter #tkinter-canvas #tkinter-entry

#питон #python-3.x #tkinter #tkinter-холст #tkinter-запись

Вопрос:

В Vkeyboard клавиша backspace (<-) используется для удаления последнего введенного текста. Я получил веб-форму кода, в которой приведен пример использования tk.Entry виджета следующим образом.

 input = canvas.get(self.canvas_textbox, "1.0", 'end-2c')
self.canvas_textbox.delete("1.0", END)
self.canvas_textbox.insert("1.0", input, END)
 

где self.canvas_textbox находится запись, которая отображает текст, когда пользователь нажимает клавиши на Vkeyboard.

Теперь я хотел изменить tk.Entry with canvas.create_text , поэтому я написал код для удаления последнего введенного символа в тексте следующим образом,

 input = canvas.itemcget(self.canvas_textbox, "text")
canvas.delete(self.canvas_textbox,"1.0", END)
canvas.insert(self.canvas_textbox, input, "1.0",END)
 

Но, к сожалению, это приводит к удалению всего текста, а не только последнего введенного символа.

Кто — нибудь может сказать мне , почему ?

Ответ №1:

Извините за мой плохой английский.

Вы удаляете его от 1 до КОНЦА, чтобы удалить всю строку. Попробуйте len(entry.get()) - 1, END . Он получает цифры того, сколько символов находится внутри записи (от начала до конца) — 1, поэтому он получает последние 2 числа.

Пример кода:

 from tkinter import *
root = Tk()

def dellastword():
    entry.delete(len(entry.get()) - 1, END)
entry = Entry(root, width=20)
entry.pack()

button = Button(root, text='Delete Last Word', width=100, height=3, command=dellastword)
button.pack()

root.mainloop()