R - эквивалент winDialogString в tcltk (tkdialog?) - PullRequest
2 голосов
/ 14 марта 2012

Что эквивалентно winDialogString в tcltk?


Фон

Я использовал readline в R, чтобы задать пользователю вопрос и получить ответ:

response <- readline("What's the air speed velocity of an unladen swallow? ")

Сегодня я был на своем ноутбуке с Windows и обнаружил функцию winDialogString, которая открывает небольшое модальное окно сообщения, чтобы получить ввод:

response <- winDialogString("What's the air speed velocity of an unladen swallow? ",
                            default="african or european?")

Я хочу использовать эту функцию, но в интересах переносимости, я хотел бы использовать tcltk версию winDialog, так что, по крайней мере, мои Linux-боксы также могут иметь это.

Теперь, если бы я использовал winDialog, то эквивалент tkmessageBox:

# fairly equivalent, tkmessageBox is more portable.
winDialog(type='yesno','Do you like green eggs and ham?')
tkmessageBox(type='yesno',message='Do you like green eggs and ham?')

Что эквивалентно winDialogString в tcltk?

Я думал, что это было tkdialog, поэтому я попробовал:

tkdialog("What's the air speed velocity of an unladen swallow?")

Это дает мне эту ошибку:

Error in structure(.External("dotTclObjv", objv, PACKAGE = "tcltk"), class = "tclObj") : 
  [tcl] wrong # args: should be "tk_dialog w title text bitmap default ...".

Документация довольно бесполезна ?tkdialog указывает на общую страницу справки tk без специальной документации. Как я могу использовать tkdialog (и это даже то, что я хочу?)

Я сделал вывод, что мне, возможно, придется ввести все аргументы, на которые он жаловался, поэтому я попробовал несколько вещей:

> tkdialog(title='',
           text="What's the air speed velocity of an unladen swallow?",
           bitmap='',default="african or european?")
Error in structure(.External("dotTclObjv", objv, PACKAGE = "tcltk"), class = "tclObj") : 
  [tcl] bad window path name "-title".

> tkdialog(tktoplevel(),title='',
           text="What's the air speed velocity of an unladen swallow?",
           bitmap='',default="african or european?")
Error in structure(.External("dotTclObjv", objv, PACKAGE = "tcltk"), class = "tclObj") : 
  [tcl] bitmap "-text" not defined.

Как я могу заставить это работать? Я предпочел бы остаться в tcltk, а не использовать что-то вроде gWidgets, поскольку tcltk находится в большинстве R-дистрибутивов (и если R-дистрибутив tcltk -совместим, я вернусь к readline) .

веселит.

1 Ответ

3 голосов
/ 15 марта 2012

Самое близкое к тому, что вам нужно, это действительно tkdialog, но он не предназначен для использования с R; вам придется проделать некоторую работу (и я полностью признаюсь, что не знаю R, я на стороне Tk вещей). Что я могу сделать, так это объяснить, какими должны быть эти параметры.

Есть документация базовой команды tk_dialog онлайн . В частности, вам необходимо:

  1. Имя окна, которое не используется ни для чего другого. (Это станет именем окна, используемого для реализации диалога.)
  2. Заголовок для диалога.
  3. Некоторый текст для тела диалога.
  4. Имя строки растрового изображения для использования. Если вы не делаете что-то очень грубое и низкоуровневое, должно быть одно из: error, gray75, gray50, gray25, gray12, hourglass, info, questhead, question, warning (или на OSX, вы также получаете следующие изображения бонусной системы: document, stationery, edition, application, accessory, folder, pfolder, trash, floppy, ramdisk, cdrom, preferences, querydoc, stop, note, caution).
  5. Начинающийся с нуля индекс кнопки по умолчанию. Если -1, то по умолчанию нет.
  6. (ну, 6, 7, ...) Текст для кнопок, по одной строке на кнопку.

API не очень хорошо разработан для использования с R. Он также не особенно хорош для Tcl, и этот список растровых изображений действительно неясен (и это говорит как один из сопровождающих) тк). Если вам интересно, список является документированным , но я не удивлен, что вы не знали, что это именно то, что вы хотели. Я бы не сказал вам об этом, за исключением того, что вы используете tk_dialog (само по себе устарело).


Вы могли бы также реализовать все это самостоятельно. Код для простого диалога не так уж и сложен (tk_dialog написан исключительно на основе обычных возможностей). Я не достаточно хороший R-программист, чтобы помочь вам в этом.

...