Ho un TextCtrl
nel mio programma wxPython e mi piacerebbe impostare la sua larghezza esattamente a 3 caratteri. Tuttavia, l'unico modo per impostarne le dimensioni manualmente accetta solo numeri di pixel. C'è un modo per specificare caratteri invece di pixel?Impostazione della larghezza di un wxPython TextCtrl in numero di caratteri
risposta
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
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).