【发布时间】:2010-09-25 04:35:15
【问题描述】:
我的 wxPython 程序中有一个TextCtrl,我想将其宽度设置为正好 3 个字符。但是,手动设置其大小的唯一方法仅接受像素数。有没有办法指定字符而不是像素?
【问题讨论】:
我的 wxPython 程序中有一个TextCtrl,我想将其宽度设置为正好 3 个字符。但是,手动设置其大小的唯一方法仅接受像素数。有没有办法指定字符而不是像素?
【问题讨论】:
意识到大多数字体是成比例的,这意味着每个字符可能采用不同的宽度。 WWW 和 lll 都是 3 个字符,但它们需要不同大小的文本框。有些字体,比如Courier,设计成固定宽度的,不会有这个问题。不幸的是,您可能无法控制在文本框中选择哪种字体。
如果你还想试试这个,关键是得到一个字符的宽度(以像素为单位),乘以字符数,然后为字符周围的边框添加一些填充。您可能会发现这是一个很好的起点:
http://docs.wxwidgets.org/stable/wx_wxdc.html#wxdcgetpartialtextextents
或者,正如 litb 建议的那样:
http://docs.wxwidgets.org/2.4/wx_wxwindow.html#wxwindowgettextextent
【讨论】:
似乎没有办法。但是,您可以使用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();
也就是说,你取一个合理宽度字符的大小(字体可能有可变宽度字符)并适当地乘以它,添加一些小的值来说明本机填充(比如 10 像素)。
【讨论】: