2008-12-03 2 views

risposta

2

Realizza che la maggior parte dei caratteri è proporzionale, il che significa che ogni carattere può assumere una larghezza diversa. WWW e lll sono entrambi 3 caratteri, ma richiedono caselle di testo di dimensioni molto diverse. Alcuni tipi di carattere, come Courier, sono progettati per essere a larghezza fissa e non presentano questo problema. Sfortunatamente non si può avere alcun controllo su quale font è selezionato nella casella di testo.

Se si desidera provare questo, la chiave è di ottenere la larghezza di un carattere in pixel, moltiplicarla per il numero di caratteri, quindi aggiungere un po 'di riempimento per i bordi attorno ai caratteri. Si possono trovare che questo è un buon punto di partenza:

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

o, come suggerisce litb:

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

3

Non sembra essere un modo. Tuttavia, è possibile utilizzare wxWindow::GetTextExtent. Questo è il codice C++, ma può essere facilmente adattato a 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(); 

Questo è, si prende la dimensione di un carattere di larghezza ragionevole (font possono avere caratteri di larghezza variabile) e moltiplicarlo correttamente, l'aggiunta di qualche piccolo valore conto per il riempimento nativo (per esempio, 10px).