2017-04-25 56 views
0

我正试图在Tkinter中使用Entry小部件开发一个搜索栏。到目前为止,当用户通过绑定<FocusIn>事件来点击条目时,我已经设法插入居中文本,该文本向左移动。当用户开始输入时,文本消失,当Entry小部件变空时,文本再次出现。在Tkinter 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

没有什么,你可以不诉诸某种形式的黑客做。例如,您可以在条目顶部覆盖一个画布并在画布中进行动画。在用户立即开始输入的情况下管理焦点将会非常棘手(尽管可能并非不可能)。

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

Tkinter不像css那样可以做有趣的动画。这根本不是为了这样工作而设计的。 Tkinter不是一个舒适的面包车和dvd播放器,它是一辆皮卡车。虽然,这是一辆装满了勒索的皮卡车,所以如果你愿意付出很大的努力,你通常可以建造你想要的东西。

+0

感谢您的快速回复。我想我会尝试使用画布,也许我可以解决一些问题。 – aelamrn1

相关问题