0

だから私はpythonを学んでいて、私に教えている本はtkinkerを使ってラベルを作成する2つの方法を教えてくれます:

self.canvas.create_text(30,10,text="Welcome",tags="text")

&

self.lbl = Label(frame1, text = "Welcome")

前の例では、移動は簡単です。

self.canvas.move("text", 1, 0)

後者の例では、背景色を簡単に変更できます。

self.lbl["bg"] = "red"

ただし、どちらの例でも、移動する方法と背景色を変更する方法はわかりませ。少なくとも、段階的に移動する方法はわかりません。私がすることができます:

 self.lbl.place(x=2)

しかし、事前に x 座標を取得できない限り、一度しか移動できません。事前に設定することもできますが、できればそのオプションは避けたいです。

4

1 に答える 1

4

両方を行う方法があります。

まず、Canvasテキストには背景がありませんが、長方形を使用して独自の背景を作成できます。

text = self.canvas.create_text(30, 10, text="Welcome", tags="text")
# The canvas.bbox method returns the corner coordinates of the provided item id.
rect = self.canvas.create_rectangle(self.canvas.bbox(text), fill='red')
# Then you need to reposition the rectangle so that it is behind the text.
self.canvas.lower(rect, text)

そこから、質問で述べたのと同じ方法でそれらを移動します。グループ タグをテキストと四角形の両方に追加すると、両方のアイテムを別々に移動する必要がなくなります。

.winfo_x()次に、および.winfo_y()メソッドを使用して、ウィジェットの現在の x、y 座標を取得できます。したがって、 を移動するLabelと、単純な加算/減算の問題になります。

self.lbl.place(x=self.lbl.winfo_x()+2)

move メソッドがキャンバスに対して行うように、ウィジェットを段階的に移動するメソッドを知りません。

どちらが良いかというと、あまり思いつきません。を使用するCanvasと、ウィンドウ内にある可能性のある他のウィジェットをオーバーラップできないことを意味すると思います。テキストがスクロールして表示されttkなくなるLabelためです。難しくありません。

于 2013-02-21T22:29:27.420 に答える