Язык: R. Вопрос: Могу ли я указать шрифт фиксированной ширины для меню (.. , graphics = T)
функция?
Недавно я задал этот вопрос о том, как заставить пользователя выбирать строку во фрейме данных в интерактивном режиме:
df <- data.frame(a=c(9,10),b=c('hello','bananas'))
df.text <- apply( df, 1, paste, collapse=" | " )
menu(df.text,graphics=T)
Я бы как |
, чтобы выстроиться в очередь. В настоящий момент они этого не делают; честно говоря, я не увеличил ширину столбцов до одинаковой ширины.Поэтому я использую формат
, чтобы получить одинаковую ширину для каждого столбца (позже я напишу код для автоматического определения ширины каждого столбца, но пока давайте проигнорируем это):
df.padded <- apply(df,2,format,width=8)
df.padded.text <- apply( df.padded, 1, paste, collapse=" | ")
menu( df.padded.text,graphics=T )
Видите, все еще шатко? Тем не менее, если я посмотрю на df.padded
, я получу:
> df.padded
a b
[1,] " 9 " "hello "
[2,] "10 " "bananas "
Таким образом, каждая ячейка определенно заполнена до одинаковой длины.
Причина этого, вероятно, в том, что шрифт по умолчанию для этого (в моей системе, Linux) не имеет фиксированной ширины.
Итак, мой вопрос:
Могу ли я указать шрифт фиксированной ширины для меню (.., graphics = T)
?
@RichieCotton заметил, что если вы посмотрите в меню
с graphics = T
он вызывает select.list
, который, в свою очередь, вызывает tcltk :: tk_select.list
.
Похоже, мне придется изменить параметры tcltk
для этого. Из @jverzani:
library(tcltk)
tcl("option", "add", "*Listbox.font", "courier 10")
menu(df.padded.text,graphics=T)
Учитывая, что menu (..., graphics = T)
вызывает tcltk :: tk_select.list
, когда graphics
ИСТИНА, мой Предполагаю, что это жизнеспособный вариант, так как любой дистрибутив, который может отображать графическое меню
в первую очередь, также будет иметь на нем tcltk
, поскольку он должен вызывать tk_select.list
.
(Кстати, я не могу найти в документации ничего, что подсказало бы мне попробовать tcl ('option', 'add', ...)
, не говоря уже о том, что опция называлась * Listbox.font
!)
Еще одно обновление - более пристальное внимание уделялось выбору .list
и код меню
, и он получается в Windows (или если .Platform $ GUI == 'AQUA'
- это Mac?), tcltk :: tk_select.list
вообще не вызывается, это просто внутренний код. Так что изменение '* Listbox.font' не повлияет на это.
Думаю, я просто:
tcltk :: tk_select.list
явно menu (..., graphics = T)
, чтобы хотя бы получить графический интерфейс (который не будет моноширинным, но лучше, чем ничего) menu (..., graphics = F)
, что определенно сработает. Спасибо всем.