我的wxPython程序中有TextCtrl
,我想将其宽度设置为3个字符。但是,手动设置其大小的唯一方法是仅接受像素数。有没有办法指定字符而不是像素?
答案 0 :(得分:3)
似乎没有办法。但是,您可以使用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)。
答案 1 :(得分:2)
意识到大多数字体都是成比例的,这意味着每个字符可能采用不同的宽度。 WWW和lll都是3个字符,但它们需要大小不同的文本框。某些字体,如Courier,设计为固定宽度,不会出现此问题。遗憾的是,您可能无法控制文本框中选择的字体。
如果您仍想尝试此操作,关键是获取字符的宽度(以像素为单位),将其乘以字符数,然后为字符周围的边框添加一些填充。您可能会发现这是一个很好的起点:
http://docs.wxwidgets.org/stable/wx_wxdc.html#wxdcgetpartialtextextents
或者,正如litb建议的那样:
http://docs.wxwidgets.org/2.4/wx_wxwindow.html#wxwindowgettextextent