5

wxPython で開発中のアプリケーションがあります。アプリケーションの一部は、グリッド内に多数の TextCtrls を作成して、任意の大規模な人のリストの曜日ごとに 4 文字のコードを入力します。

私はそれを機能させることができましたが、何か厄介なことをしなければなりません。具体的には、テキストのビットの大きさ (ピクセル単位) を把握する良い方法を見つけられなかったので、最大 (4 文字) のコードにちょうど収まるように TextCtrls のサイズを推測する必要があります。私の懸念は、テキストのサイズが変更された場合、またはアプリケーションが MSW 以外に移植された場合、私のレイアウトが壊れる可能性があることです。

私が見つけた解決策は、StaticText オブジェクトを作成し、4 つの大きな文字で埋め、そのサイズを取得してから、.Destroy() することでした。これは機能しますが、実際には厄介なソリューションのようです。任意のテキスト文字列が TextCtrl でどれだけ大きくなるかを把握するためのより直接的な方法を誰かが持っていますか? 私はドキュメントを調べましたが、何も見つけることができませんでした。また、私がやろうとしていることを正確に行う例も見たことがありません。

小さなコード サンプル (テスト メソッドを示す) は次のとおりです。

    # This creates and then immediately destroys a static text control
    # in order to learn how big four characters are in the current font.
    testst = wx.StaticText(self, id = wx.ID_ANY, label = "XXXX")
    self.fourlettertextsize = testst.GetClientSize() + (4,4)
    testst.Destroy()

(+ (4,4) の部分は、TextCtrl のクライアント領域にカーソルと小さな境界線を収容するために、コントロールにもう少しスペースを追加することです。これは、私が直接やりたくないもう 1 つのことです。)

4

2 に答える 2

13

フェイス、サイズなどで wx.Font インスタンスを作成します。wx.DC を作成します。次に dc.GetTextExtent("a text string") を呼び出して、その文字列を表示するために必要な幅と高さを取得します。それに応じて、グリッドの行の高さと列の幅を設定します。

何かのようなもの:

font = wx.Font(...)
dc = wx.DC()
dc.SetFont(font)
w,h = dc.GetTextExtent("test string")
于 2013-01-11T00:55:29.507 に答える