3

私はPython Tkinterに固有の話をしています.ボタンとインラインのテキストがあり、ピクセル座標を使用しています. 現在、テキスト文字列は動的に変化していますが、テキスト文字列が長いとオーバーフローします。

だから、テキストの長さに基づいて座標を変更できる方法があれば欲しい

例えば:

canvas.create_text(20, 30, anchor=W, font="Purisa",
    text="Most relationships seem so transitory")

このようなものを使用すると

canvas.create_text(20+len(text), 30, anchor=W, font="Purisa",
    text="Most relationships seem so transitory")

私はtkinterに非常に慣れていないため、デバッグするコードが非常にタイトであるため、最初から動的に変更することはできません

4

2 に答える 2

2

テキストのサイズに基づいて座標を計算できますが、指定されたフォントのテキストのサイズをピクセル単位で調べる必要があります。これは、最初にスクラッチ キャンバスと bbox メソッドを使用して、Tkinter で実行できます。テキスト アイテムを作成して ID を取得し、bbox メソッドを使用してそのサイズを取得します。

scratch = Canvas()
id = scratch.create_text((0, 0), text=text, <options>)
size = scratch.bbox(id)
# size is a tuple: (x1, y1, x2, y2)
# since x1 and y1 will be 0, x2 and y2 give the string width and height

次に、結果に基づいて x 座標と y 座標を計算し、実際のキャンバスに描画できます。これを行うためのより効率的な方法もある可能性がありますが、私はまだ知りません。

または、テキスト サイズに基づいて x 位置を変更する、つまり右揃えにしたいだけかもしれません。Tkinter では、"anchor=E" オプションを使用してテキスト領域の右端に x 座標を指定することで、これを最も簡単に行うことができます。

canvas.create_text(ButtonX - 10, 30, anchor=E, ...)

アンカーやその他のオプションに加えて、たとえば「幅 = 200」を使用して、テキストを幅 200 ピクセルのボックスで囲むこともできます。

于 2013-11-14T06:38:54.490 に答える