在tkinter Entry小部件中交互式验证内容的推荐技术是什么?
我已经阅读了关于使用validate=True和的帖子validatecommand=command,并且看起来这些功能受限于它们在validatecommand命令更新Entry小部件的值时被清除的事实.
鉴于这种行为,我们应该绑定的KeyPress,Cut以及Paste事件和监视/更新我们的Entry小部件的价值,通过这件事情?(以及我可能错过的其他相关事件?)
或者我们是否应该完全忘记交互式验证并仅对FocusOut事件进行验证?
我正在尝试使用预定义的值填充 Tkinter 组合框以供选择。它正在填充,我可以输入并获得建议。但是,为了做到这一点,我必须绝对知道前几个字符。如果我知道字符串中间或末尾的一些文本,则它没有用,因为组合框只执行'LIKE%' 搜索而不是 '%LIKE%' 搜索。
预期输出(输入“Ceramic”一词会获取包含该字符串的所有名称。注意:这不是 Tkinter 屏幕截图):
这是我迄今为止对代码的改编,如果有人可以建议如何修改AutocompleteCombobox类以进行 LIKE 搜索,那就太好了。
作为示例,以下工作代码具有值 "Cranberry" 和 "Strawberry" ,我的要求是键入 "berry" 并获得两种水果的建议。
import Tkinter
import ttk
import sqlite3
class AutocompleteCombobox(ttk.Combobox):
def set_completion_list(self, completion_list):
"""Use our completion list as our drop down selection menu, arrows move through menu."""
self._completion_list = sorted(completion_list, key=str.lower) # Work with a sorted list
self._hits = []
self._hit_index = 0
self.position = 0
self.bind('<KeyRelease>', self.handle_keyrelease)
self['values'] = self._completion_list # Setup our popup menu
def …Run Code Online (Sandbox Code Playgroud) 从这里的第一个答案: StackOverflow#6548837 我可以在用户键入时调用回调:
from Tkinter import *
def callback(sv):
print sv.get()
root = Tk()
sv = StringVar()
sv.trace("w", lambda name, index, mode, sv=sv: callback(sv))
e = Entry(root, textvariable=sv)
e.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
但是,该事件发生在每个键入的字符上。当用户完成键入并按下Enter键或Entry小部件失去焦点(即用户单击其他位置)时,如何调用事件?
tkinter ×3
python ×2
callback ×1
combobox ×1
events ×1
python-2.7 ×1
sqlite ×1
textbox ×1
tk-toolkit ×1
validation ×1