Bezdepbonusu7Программирование: статьи и ответы

Вопрос

R - эквивалент winDialogString в tcltk (tkdialog?)

Автор вопроса: mathematical.coffeeОтветов: 1

Что эквивалентно 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).

ваше здоровье.

  • Не уверен, что ты найдешь его. Для ginput в gWidgetstcltk мне пришлось создать свой собственный. github.com/jverzani/gWidgets2tcltk/blob/master/R/dialogs. Р jverzani 14.03.2012
  • Это позор. Я все еще хотел бы знать, как использовать tkdialog. (Это впечатляющий набор функций, спасибо, что поделились! Однажды я хотел бы поделиться своим личным набором служебных функций, которые я написал для R) mathematical.coffee 14.03.2012

ruser-interfacetcltk

Ответы

Ответ 1 · рейтинг 3 · Donal Fellows

Ближе всего к тому, что вам нужно, действительно 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 ). Если вам интересно, список это задокументировано, но я не удивлен, что вы не знали, что хотели именно этого. Я бы не сказал вам об этом, за исключением того, что вы используете tk_dialog (на самом деле он устарел).


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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы