如何绑定tkinter中的退格键以删除多个字符?

如何绑定tkinter中的退格键以删除多个字符?,第1张

概述我想创建绑定,让我按Tab键插入预定义数量的空格,然后按退格键删除那么多空格,基于变量. 当用户按下退格键时,如何删除预定数量的空格?我不知道如何删除多个字符,当我试图解决这个问题时,绑定会删除错误的字符数. 这个问题分为两部分.第一部分与如何相关 一次删除多个字符.第二部分是如何在绑定到退格键的绑定中使用它 删除多个字符 文本小部件的delete方法有两个索引,并将删除 这些索引之间的字符. T 我想创建绑定,让我按Tab键插入预定义数量的空格,然后按退格键删除那么多空格,基于变量.

当用户按下退格键时,如何删除预定数量的空格?我不知道如何删除多个字符,当我试图解决这个问题时,绑定会删除错误的字符数.

解决方法 这个问题分为两部分.第一部分与如何相关
一次删除多个字符.第二部分是如何在绑定到退格键的绑定中使用它

删除多个字符

文本小部件的delete方法有两个索引,并将删除
这些索引之间的字符. Tkinter文本索引可以是相对的
通过将修饰符应用于索引.例如,参考四个
插入点之前的字符可以使用索引“insert”加上修饰符“-4 chars”.

例:

self.text.delete("insert -4 chars","insert")

因为这些索引是普通字符串,所以如果要使用变量,可以使用字符串格式.

例:

tabWIDth = 4self.text.delete("insert -%d chars" % tabWIDth,"insert")

使用带绑定的功能

要在用户按退格键时运行功能,您可以绑定
< BackSpace>的函数事件.此功能将被传递
一个代表事件的参数.

例如:

self.text.bind("<BackSpace>",self.do_backspace)...def do_backspace(self,event):    ...

对标准键进行自定义绑定的一个重要部分是知道默认情况下绑定不会替换默认行为.例如,如果您的绑定删除了一个字符然后返回,则会删除两个字符,因为您的绑定将删除一个,默认绑定将删除一个.

覆盖此行为的方法是返回字符串“break”.因为您的自定义绑定发生在默认绑定之前,所以默认绑定将看到您返回“break”并且什么都不做.这使得在保持默认行为的同时覆盖默认行为或执行其他工作非常简单.

总而言之,如果它们是四个连续的空格,则可以定义一个删除前四个字符的函数,如果不是,则执行默认行为:

def do_backspace(self,event):    # get prevIoUs <tabWIDth> characters; if they are all spaces,remove them    prevIoUs = self.text.get("insert -%d chars" % self.tabWIDth,"insert")    if prevIoUs == " " * self.tabWIDth:        self.text.delete("insert-%d chars" % self.tabWIDth,"insert")        # return "break" so that the default behavior doesn't happen        return "break"    # if we get to here,we'll just return. That allows the default    # behavior to run

把它们放在一起

这是一个完整的工作示例,当您插入四个空格时
按Tab键,按退格键时删除四个空格:

import tkinter as tkdef do_tab(event):    text.insert("insert"," " * tabWIDth)    # return "break" so that the default behavior doesn't happen    return "break"def do_backspace(event):    # get prevIoUs <tabWIDth> characters; if they are all spaces,remove them    prevIoUs = text.get("insert -%d chars" % tabWIDth,"insert")    if prevIoUs == " " * tabWIDth:        text.delete("insert-%d chars" % tabWIDth,"insert")        # return "break" so that the default behavior doesn't happen        return "break"    # if we get to here,we'll just return. That allows the default    # behavior to runroot = tk.Tk()tabWIDth = 4text = tk.Text(root)text.pack(fill="both",expand=True)text.bind("<Tab>",do_tab)text.bind("<BackSpace>",do_backspace)root.mainloop()
总结

以上是内存溢出为你收集整理的如何绑定tkinter中的退格键以删除多个字符?全部内容,希望文章能够帮你解决如何绑定tkinter中的退格键以删除多个字符?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1207522.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存