【问题标题】:Setting the width of a wxPython TextCtrl in number of characters以字符数设置 wxPython TextCtrl 的宽度
【发布时间】:2010-09-25 04:35:15
【问题描述】:

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

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    意识到大多数字体是成比例的,这意味着每个字符可能采用不同的宽度。 WWW 和 lll 都是 3 个字符,但它们需要不同大小的文本框。有些字体,比如Courier,设计成固定宽度的,不会有这个问题。不幸的是,您可能无法控制在文本框中选择哪种字体。

    如果你还想试试这个,关键是得到一个字符的宽度(以像素为单位),乘以字符数,然后为字符周围的边框添加一些填充。您可能会发现这是一个很好的起点:

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

    或者,正如 litb 建议的那样:

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

    【讨论】:

      【解决方案2】:

      似乎没有办法。但是,您可以使用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 像素)。

      【讨论】:

        猜你喜欢
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-21
        相关资源
        最近更新 更多