在Tkinter Entry小部件中动画文本

时间:2017-04-25 21:56:02

标签: python python-2.7 tkinter

我正尝试使用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>')

1 个答案:

答案 0 :(得分:0)

如果不诉诸某种黑客,你无能为力。例如,您可以在条目顶部覆盖画布并在画布中执行动画。在用户立即开始输入的情况下管理焦点将是棘手的(尽管可能并非不可能)。

您还可以使用xview命令慢慢滚动数据,但这会涉及插入足够的空格字符以使数据可滚动。

Tkinter不像css,你可以在那里做有趣的动画。它根本不是为那种方式而设计的。 Tkinter不是一个装满杯架和DVD播放器的舒适小型货车,它是一辆皮卡车。虽然,这是一辆装满了legos的皮卡车,所以如果你愿意付出很多努力,你通常可以建造你想要的东西。