2008-12-03 6 views

Répondre

2

Réalisez que la plupart des polices sont proportionnelles, ce qui signifie que chaque caractère peut prendre une largeur différente. WWW et lll sont les trois caractères, mais ils nécessitent des tailles de boîte de texte très différentes. Certaines polices, telles que Courier, sont conçues pour être de largeur fixe et n'auront pas ce problème. Malheureusement, vous n'avez aucun contrôle sur la police sélectionnée dans la zone de texte.

Si vous voulez toujours essayer ceci, la clé est d'obtenir la largeur d'un caractère en pixels, multipliez-le par le nombre de caractères, puis ajoutez un peu de remplissage pour les bordures autour des caractères. Vous trouverez peut-être ce pour être un bon point de départ:

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

ou, comme litb suggère:

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

3

Il ne semble pas être un moyen. Vous pouvez cependant utiliser wxWindow::GetTextExtent. Ceci est du code C++, mais peut être facilement adapté à 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(); 

Ceci est, vous prenez la taille d'un caractère de largeur raisonnable (polices de caractères peuvent avoir des caractères de largeur variable) et multiplier correctement, en ajoutant une petite valeur compte pour le remplissage natif (disons, 10px).

Questions connexes