2012-04-23 6 views
1

私はテキストウィジェットを使ってroguelikeを作成しようとしています。tkinter.Textウィジェットの現在のサイズを調べる

私は、幅と高さのオプションを使用してウィジェットのサイズを設定でき、ウィジェットのピクセルの高さまたは幅を見つけることができるということをいくつか考え出しました。しかし、私がしたいのは、ウィジェットのサイズを変更可能(pack(expand = "yes"、fill = "both"))ですが、サイズ変更時に表示されたテキストをリフレッシュできることです。 winfo_width()と文字のピクセル寸法に基づく数学に頼らずにウィジェットが実行されているときに文字の寸法を取得する方法はありますか?

+0

フレームにテキストウィジェットをパックし、フレームのサイズを取得することができます... – mgilson

+0

それはちょうどあなたにピクセルサイズを与えます。 – jaccarmac

+0

申し訳ありませんが、投稿を慎重に読んでいませんでした。私はあなたがピクセルサイズを望んだと思った。私のせい。 – mgilson

答えて

0

自動的に幅を文字で取得する方法はありませんが、固定幅フォントを使用していると仮定して計算するのは簡単です。これを行う1つの方法は、フォントオブジェクトのメソッドfont_measureを使用することです。 font_measureを使用して '0'(またはその点については他の文字)の幅を取得してください; tkユーザーは内部的にゼロで固定幅フォントでは問題ありません)。

+0

ありがとう!これにはいくつかの余分なコードが含まれますが、Pythonの美しさはそのシンプルさです。これは(最も重要な部分です:) – jaccarmac

2

私はその正確な同じ問題を数回ジャガマクに掛けました。私の知る限りでは、文字列の幅を見つける方法はありません。本当に唯一の方法は、width、height、geometryというwinfo_コマンドを使うことです。ただし、ラベルを変更してテキストを追加すると、すべてのテキストが表示されていることを確認したいような音がします。そうであれば、心配する必要はありません。それはすべてウィジェット自体によって処理されるべきです。すべてのラベルを表示するために展開されていない場合は、通常、そのラベルを含むウィジェットの1つが展開するように設定されていないことを意味します(expandまたはYESを.pack、columnconfigure(i、weight = 1) 。グリッド)。

最終的な考え。パックの引数でYESであり、"yes"でないことを確認してください。大文字のYESは文字列ではなく、Tkinterによって定義された変数名です。

+1

tkinter変数名は文字列で置き換えることができます。 'tkinter import *'とは対照的に 'import tkinter as tk'を使用する方がずっと便利です。 –

+0

私は本質的に呪いの代わりにテキストを使ってここにゲームを書いています。私はエントリーについて心配していません。 – jaccarmac

0

これは古い質問ですが、いくつかの研究を行った後、私は実際に数学なしで直接高さ/幅の情報を取得する方法やTextウィジェットのcget()方法使用してフォントの幅で遊んがあることを発見しました:

text_widget = tk.Text() 
width_in_char = text_widget.cget('width') 
height_in_char = text_wdiget.cget('height') 

Textウィジェットは、その高さと幅の設定を文字数で保存しているため、これらのパラメータをクエリするだけで、探しているものがわかります。

関連する問題