wxPython プログラムに がTextCtrl
あり、その幅を正確に 3 文字に設定したいと考えています。ただし、そのサイズを手動で設定する唯一の方法は、ピクセル数のみを受け入れることです。ピクセルの代わりに文字を指定する方法はありますか?
2 に答える
方法はないようです。ただし、使用できますwxWindow::GetTextExtent
。これは C++ コードですが、wxPython に簡単に適用できます。
int x, y;
textCtrl->GetTextExtent(wxT("T"), &x, &y);
textCtrl->SetMinSize(wxSize(x * N + 10, -1));
textCtrl->SetMaxSize(wxSize(x * N + 10, -1));
/* re-layout the children*/
this->Layout();
/* alternative to Layout, will resize the parent to fit around the new
* size of the text control. */
this->GetSizer()->SetSizeHints(this);
this->Fit();
これは、適切な幅の文字 (フォントには可変幅の文字がある場合があります) のサイズを取得し、それを適切に乗算して、ネイティブのパディング (10px など) を考慮して小さな値を追加します。
ほとんどのフォントはプロポーショナルであることに注意してください。つまり、各文字の幅が異なる場合があります。WWW と lll はどちらも 3 文字ですが、テキスト ボックスのサイズが大きく異なります。Courier などの一部のフォントは固定幅に設計されているため、この問題は発生しません。残念ながら、テキスト ボックスで選択されているフォントを制御できない場合があります。
それでもこれを試したい場合は、文字の幅をピクセル単位で取得し、それを文字数で乗算してから、文字の周囲の境界線にパディングを追加することが重要です。これは良い出発点になるかもしれません:
http://docs.wxwidgets.org/stable/wx_wxdc.html#wxdcgetpartialtextents
または、litb が示唆するように:
http://docs.wxwidgets.org/2.4/wx_wxwindow.html#wxwindowgettextent