以字符数设置wxPython TextCtrl的宽度

时间:2008-12-03 18:27:26

标签: python wxpython

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

2 个答案:

答案 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