Perl Tkx を使用して単純なアプリケーションを作成しており、ユーザーがディレクトリを選択できるようにしています。名前が長すぎる場合は、テキストの折り返しを使用したり、ボックスをばかげた長さに伸ばしたりしてディレクトリ名全体を表示するのではなく、名前を切り詰めて最後に「...」を追加したいと考えています。
問題は、ラベルの幅が任意の値 (40 など) に定義されていることです。この値がラベルに収まる文字数の測定値である場合、文字列を 37 に切り捨てて「...」を追加するだけで済みますが、そうではないようです。
-width
Perl Tkx を使用したラベルの実際の測定値を知っている人はいますか? -width
文字列が占める単位の量を見つけるにはどうすればよいのでしょうか?
編集:
Tclマニュアルでこの回答を見つけました:
データベース クラス: 幅 ラベルの希望の幅を指定します。画像またはビットマップがラベルに表示されている場合、値は画面単位 (つまり、Tk_GetPixels で受け入れられる任意の形式) です。テキストの場合は文字です。
このオプションが指定されていない場合、ラベルの目的の幅は、表示されているイメージ、ビットマップ、またはテキストのサイズから計算されます。
これは、幅 40 でテキストを切り捨てるには、文字列を 37 文字に切り捨てて "..." を追加するだけでよいことを意味します。
ラベルをすべて「M」で埋めて、これをテストしました。通常、最も幅の広い文字であるため、「M」という文字を使用しました (こちら を参照)。37 個の "M" で切り捨てて末尾に "..." を追加するコードを書きましたが、約 24 個の "M" の後、"M" がラベルの末尾を超えてオーバーフローするようです。
これは、最も幅の広い文字の 40 文字に合わせてラベルを引き伸ばすだけであると想定するのは安全ではないことを意味します。したがって、私の質問にはまだ答えがありません。
文字列の「幅」を決定して、適切に切り捨てるにはどうすればよいですか?
EDIT2:
回避策を見つけましたが、探していた解決策ではありません。ラベルのテキストを等幅フォントに変更すると、正しく機能します。見栄えはよくないので、固定幅以外のフォントで機能するソリューションが本当に欲しいです。