如何绑定tkinter中的退格键以删除多个字符?
我想创建绑定,让我按Tab键插入预定义数量的空格,然后按退格键删除那么多空格,基于变量. 当用户按下退格键时,如何删除预定数量的空格?我不知道如何删除多个字符,当我试图解决这个问题时,绑定会删除错误的字符数. 解决方法这个问题分为两部分.第一部分与如何相关一次删除多个字符.第二部分是如何在绑定到退格键的绑定中使用它 删除多个字符 文本小部件的delete方法有两个索引,并将删除 例: self.text.delete("insert -4 chars","insert") 因为这些索引是普通字符串,所以如果要使用变量,可以使用字符串格式. 例: tabWidth = 4 self.text.delete("insert -%d chars" % tabWidth,"insert") 使用带绑定的功能 要在用户按退格键时运行功能,您可以绑定 例如: 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 把它们放在一起 这是一个完整的工作示例,当您插入四个空格时 import tkinter as tk def 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 run root = tk.Tk() tabWidth = 4 text = tk.Text(root) text.pack(fill="both",expand=True) text.bind("<Tab>",do_tab) text.bind("<BackSpace>",do_backspace) root.mainloop() (编辑:大庆站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |