2017-04-25 11 views
0

Entryウィジェットを使ってTkinterで検索バーを開発しようとしています。今のところ、ユーザーが<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はcupholdersとdvdプレーヤーでいっぱいの快適なミニバンではなく、ピックアップトラックです。しかし、それはレゴが積み込まれたピックアップトラックなので、多くの努力を惜しみなくかければ、あなたが望むものを作ることができます。

+0

クイック返信ありがとうございます。私はキャンバスを使ってみようと思っています。多分私は何かを働かせることができます。 – aelamrn1

関連する問題