Установка ширины wxPython TextCtrl в количестве символов

Вам нужно переставить все строковые значения в столбцы и заполнить их 0 или 1, звучит как непростая задача, но, как упоминал Дж. Андерсон, упомянутые выше, есть библиотеки, чтобы сделать это очень просто.

Я бы создал обобщенную функцию, используя get_dummies, что-то вроде этого:

def dummy_df(df, todummy_list):
    for x in todummy_list:
            dummies = pd.get_dummies(df[x], prefix=x, dummy_na=False)
            df = df.drop(x, 1)
            df = pd.concat([df, dummies], axis=1)
    return df

И вызвал функцию со всеми функциями, которые должны быть подставлены

todummy_list = ['MODEL_NAME', 'TRANS_TYPE', 'FUEL_TYPE']
train = dummy_df(train, todummy_list)
[112 ] с учетом того, что «поезд» представляет собой информационный блок панд.

7
задан Eli Courtwright 3 December 2008 в 18:27
поделиться

2 ответа

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

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

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

или, поскольку litb предлагает:

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

2
ответ дан 7 December 2019 в 12:25
поделиться

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

Это, Вы берете размер разумного символа width (шрифты могут иметь символы переменной ширины), и умножьте его правильно, добавляя некоторое маленькое значение для составления собственного компонента, дополняющего (скажите, 10 пкс).

3
ответ дан 7 December 2019 в 12:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: