2008-12-03 15 views

Antwort

2

Beachten Sie, dass die meisten Schriftarten proportional sind, was bedeutet, dass jedes Zeichen eine andere Breite haben kann. WWW und III sind beide 3 Zeichen, aber sie werden eine sehr große Textbox erfordern. Einige Schriftarten, z. B. Courier, haben eine feste Breite und dieses Problem tritt nicht auf. Leider haben Sie möglicherweise keine Kontrolle darüber, welche Schriftart im Textfeld ausgewählt ist.

Wenn Sie dies immer noch versuchen möchten, müssen Sie die Breite eines Zeichens in Pixeln ermitteln, sie mit der Anzahl der Zeichen multiplizieren und dann eine Füllung für die Rahmen um die Zeichen hinzufügen. Sie können diese sein, einen guten Ausgangspunkt zu finden:

http://docs.wxwidgets.org/stable/wx_wxdc.html#wxdcgetpartialtextextents

oder, wie litb schlägt vor:

http://docs.wxwidgets.org/2.4/wx_wxwindow.html#wxwindowgettextextent

3

Es ist kein Weg zu sein scheint. Sie können jedoch wxWindow::GetTextExtent verwenden. Dies ist C++ Code, kann aber leicht zu WxPython angepasst werden:

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(); 

Sie nehmen die Größe einer angemessenen Breite Zeichen (Fonts können variable Breite Zeichen) und multiplizieren Sie es richtig, das ist, das Hinzufügen einiger kleiner Wert Konto für natives Padding (z. B. 10px).

Verwandte Themen