【问题标题】:Problems with Tkinter "autocomplete" Entry widgetTkinter“自动完成”条目小部件的问题
【发布时间】:2016-08-18 07:08:45
【问题描述】:

我一直在寻找一种将自动完成添加到 tkinter ttk.Entry 小部件的方法。我还偶然发现了一个建议 this solution 的网站。阅读 RobB 的答案,无论大小写如何,我都能使其正常工作。但是对于我正在寻找的那种用法(向 SQLite 数据库添加一个新项目,同时从以前的记录中获取自动完成),按键也有一些奇怪的地方。我尝试的代码的第一个版本(来自this link,由 Ian Weisser 编写)会在用户每次按下 时删除一个字符。 StackOverflow 上的这个版本删除了捕获<Backspace>, <Left>, <Right>, <Up>, <Down> 击键的代码行,但我认为在打字时,如果用户按下左键,自动完成应该暂停,删除光标位置后的选定文本。

那么,我们如何更改代码,让用户可以正常输入文本并返回几个字符以更正任何拼写错误,而不删除文本?

【问题讨论】:

    标签: python tkinter autocomplete


    【解决方案1】:

    我已经根据这两个来源编辑了代码,对我来说,我认为这样效果更好:

        def handle_keyrelease(self, event):
        """event handler for the keyrelease event on this widget"""
        if event.keysym == "BackSpace":
            if self.position < self.index(END): # delete the selection
                self.delete(self.position, END)
            else:
                #self.delete(self.index(INSERT), END) 
                self.position = self.index(END)
        if event.keysym == "Left":
            if self.position < self.index(END): # delete the selection
                self.delete(self.position, END)
            #else:
                #self.position = self.position-1 # delete one character
                #self.delete(self.position, END)
        if event.keysym == "Right":
            self.position = self.index(END) # go to end (no selection)
        if event.keysym == "Down":
            self.autocomplete(1) # cycle to next hit
        if event.keysym == "Up":
            self.autocomplete(-1) # cycle to previous hit
        # perform normal autocomplete if event is a single key or an umlaut
        if len(event.keysym) == 1:
            self.autocomplete()
    

    基本上,这是 Ian Weisser 的版本。我在“退格”键部分添加了if 子句,并删除了上面的注释行,以便用户返回并更正一些拼写错误。现在,如果用户返回并编辑某些内容,则先前输入的文本的其余部分将保持不变,并且仅当用户按下(仅删除剩余的自动完成但其余部分保持不变)或退格键(删除自动完成和一个字符)时,文本才会被删除一次,正如预期的那样)。如果用户在文本中单击鼠标,则不会删除任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      相关资源
      最近更新 更多