gpt4 book ai didi

python - tkinter 自动完成小部件小写偏差

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:24 25 4
gpt4 key购买 nike

我在 Internet 上发现了一个有趣的自动完成小部件类——我已经将其精简到最基本的部分——让我无聊的 python 2.7 tkinter 入口窗口自动完成入口窗口。

from Tkinter import*

class AutocompleteEntry(Entry):

def set_completion_list(self, completion_list):
self._completion_list = completion_list
self._hits = []
self._hit_index = 0
self.position = 0
self.bind('<KeyRelease>', self.handle_keyrelease)

def autocomplete(self, delta=0):
if delta:
self.delete(self.position,END)
else:
self.position = len(self.get())
_hits = []
for element in self._completion_list:
if element.startswith(self.get().lower()):
_hits.append(element)
if _hits != self._hits:
self._hit_index = 0
self._hits=_hits
if _hits == self._hits and self._hits:
self._hit_index = (self._hit_index + delta) % len(self._hits)
if self._hits:
self.delete(0,END)
self.insert(0,self._hits[self._hit_index])
self.select_range(self.position,END)

def handle_keyrelease(self, event):
if len(event.keysym)== 1:
self.autocomplete()

class Code:
def __init__(self, parent):
self.myParent = parent
self.main_frame = Frame(parent, background="light blue")
self.main_frame.pack(expand=YES, fill=BOTH)

test_list = ('test', 'type', 'true', 'tree')

self.enter = AutocompleteEntry(self.main_frame, width=30)
self.enter.set_completion_list(test_list)
self.enter.pack(side=LEFT, expand=NO)



root = Tk()
code = Code(root)
root.mainloop()

效果很好,但有一个恼人的警告:似乎自动完成引用的列表偏向于小写单词。此代码段有效:

test_list = ('test', 'type', 'true', 'tree')

将列表更改为大写,自动完成功能消失。

test_list = ('Test', 'Type', 'True', 'Tree')

我已经回到原来的互联网代码http://tkinter.unpythonic.net/wiki/AutocompleteEntry它显示出同样的缺陷。我如何更改自动完成小部件代码以消除这种偏差,使其能够接受包含大写和小写单词的列表?

最佳答案

尝试删除

.lower()

来自

if element.startswith(self.get().lower()):

或者使匹配不区分大小写:

if element.lower().startswith(self.get().lower()):

这会将您的输入字符串转换为小写,然后将列表值也转换为小写,以便在输入相同字母时进行匹配,即使不区分大小写。

关于python - tkinter 自动完成小部件小写偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8942371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com