7

我的 wxPython 程序中有一个TextCtrl,我想将其宽度设置为正好 3 个字符。但是,手动设置其大小的唯一方法仅接受像素数。有没有办法指定字符而不是像素?

4

2 回答 2

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)。

于 2008-12-03T18:44:38.410 回答
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

于 2008-12-03T18:42:41.597 回答