【问题标题】:How to delete the last character of text in canvas.create_text() in tkinter?如何在 tkinter 中删除 canvas.create_text() 中文本的最后一个字符?
【发布时间】:2020-12-25 13:44:30
【问题描述】:

self.canvas_textbox = canvas.create_text(290, 250, text='SOME TEXT', anchor=NW, fill="lime")

如何删除来自SOME TEXT的文本的最后一个字符,我必须删除最后一个T

我尝试了以下代码,但它删除了整个文本。

canvas.delete(self.canvas_textbox,"1.0", END)

请任何人帮助我!

【问题讨论】:

  • 这不是您几分钟前提出的问题的重复吗?

标签: python python-3.x tkinter tkinter-canvas tkinter-entry


【解决方案1】:

canvas 一个名为dchars() 的方法,您可以使用它来删除canvas 文本的字符。

语法:canvas.dchars(tagOrId, first, last)

dchars 从一个或多个文本项中删除字符。您可以指定要从哪个索引中删除。例如,canvas.dchars(tag, 1, 3) 将删除第二、第三和第四个字符。

要删除文本的最后一个字符,请使用canvas.index(tagOrId, specifier) 获取最后一个字符的索引。说明符tkiner.END返回字符串的最后一个索引,然后使用dchars,如下所示。

from tkinter import *

def update(event):
     canvas.dchars('text', canvas.index('text' ,END)-1 )
    

window = Tk()
canvas = Canvas(window,width=300, height=300, bd=0)
canvas.pack()

canvas_textbox = canvas.create_text(20, 70, text='Text', fill="red", tag='text')
canvas.bind('<Button>', update)

window.mainloop()

【讨论】:

    【解决方案2】:

    要实现这一点,您可以配置已有的项目。

    为此,您首先需要画布的itemcget 方法,然后通过画布的itemconfig 方法对字符串和插入字符串进行切片。

    可以在此处找到使用的工作示例:

    import tkinter as tk
    
    def del_letter():
        old_string = canva.itemcget(c_txt, 'text')
        new_string = old_string[:-1]
        canva.itemconfig(c_txt, text=new_string)
    
    root = tk.Tk()
    canva= tk.Canvas(root)
    c_txt= canva.create_text(10,10, text='SOME TEXT', anchor='nw')
    canva.pack()
    butto= tk.Button(root, text='del last letter', command=del_letter)
    butto.pack()
    

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 2014-09-08
      • 2011-10-01
      • 1970-01-01
      • 2021-11-06
      • 2012-07-07
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      相关资源
      最近更新 更多