我正尝试使用Entry小部件在Tkinter中开发搜索栏。到目前为止,当用户通过绑定<FocusIn>
事件点击Entry时,我设法插入了向左移动的居中文本。当用户开始输入时文本消失,当Entry小部件变空时重新出现。
使用justify
选项完成文本从中心到左侧的移动。这意味着文本从中心跳到左边,这不是我想要的。我希望找到一种动画文本的方式,以便它可以平滑地从小部件的中心滑动到小部件的左侧。
任何帮助将不胜感激。我知道使用Tkinter画布可以实现这一点吗?
提前致谢。
这是我的代码:
from Tkinter import *
class SearchEntry:
def __init__(self, master):
self.master = master
self.entry = Entry(self.master, foreground = '#666', justify = 'center')
self.entry.insert(0, 'Search')
self.entry.bind('<FocusIn>', self.onfocus)
self.entry.bind('<FocusOut>', self.outfocus)
self.update()
def update(self):
if self.entry.get() == '':
self.entry.insert(0, 'Search')
self.entry.icursor(0)
self.entry.bind('<Key>', self.keypress)
self.master.after(1, self.update)
def onfocus(self, event):
if self.entry.get() == 'Search':
self.entry.configure(justify = 'left')
self.entry.icursor(0)
self.entry.bind('<Key>', self.keypress)
def outfocus(self, event):
if self.entry.get() == 'Search':
self.entry.configure(justify = 'center')
def keypress(self, event):
self.entry.delete(0, END)
self.entry.unbind('<Key>')
答案 0 :(得分:0)
如果不诉诸某种黑客,你无能为力。例如,您可以在条目顶部覆盖画布并在画布中执行动画。在用户立即开始输入的情况下管理焦点将是棘手的(尽管可能并非不可能)。
您还可以使用xview
命令慢慢滚动数据,但这会涉及插入足够的空格字符以使数据可滚动。
Tkinter不像css,你可以在那里做有趣的动画。它根本不是为那种方式而设计的。 Tkinter不是一个装满杯架和DVD播放器的舒适小型货车,它是一辆皮卡车。虽然,这是一辆装满了legos的皮卡车,所以如果你愿意付出很多努力,你通常可以建造你想要的东西。