Установка ширины wxPython TextCtrl в количестве символов - PullRequest
7 голосов
/ 03 декабря 2008

У меня есть TextCtrl в моей программе wxPython, и я хотел бы установить его ширину ровно 3 символа. Тем не менее, единственный способ установить его размер вручную принимает только количество пикселей. Есть ли способ указать символы вместо пикселей?

Ответы [ 2 ]

3 голосов
/ 03 декабря 2008

Кажется, нет пути. Однако вы можете использовать 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).

2 голосов
/ 03 декабря 2008

Поймите, что большинство шрифтов пропорциональны, что означает, что каждый символ может иметь разную ширину. WWW и lll - это 3 символа, но они потребуют совершенно разных размеров текстового поля. Некоторые шрифты, такие как Courier, предназначены для фиксированной ширины и не будут иметь этой проблемы. К сожалению, вы не можете контролировать, какой шрифт выбран в текстовом поле.

Если вы все еще хотите попробовать это, ключ состоит в том, чтобы получить ширину символа в пикселях, умножить ее на количество символов, а затем добавить отступы для границ вокруг символов. Вы можете найти это хорошей отправной точкой:

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

или, как подсказывает горит:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...