Как получить доступ и изменить родственный объект Tcl/Tk в R

Короче:

я использую tcltk пакет в R. Но не-R пользователи также могут предлагать идеи и приводить примеры на другом языке, кроме R. У меня есть список объектов Tcl/Tk в R <Tcl> .1.1.1.1 .1.1.1.2 .1.1.1.3 и хотите получить доступ и изменить каждый объект в отдельности. Как мне это сделать?

Или, если у меня есть объект кнопки A, как я могу получить доступ и изменить объект кнопки B?

Подробности:

У меня есть следующий виджет:

Код для его создания:

library(tcltk)

top <- tktoplevel()

frame_1 <- tkframe(top)
tkgrid(frame_1)

frame_n <- tkframe(frame_1)
tkgrid(frame_n)

b1 <- ttkbutton(frame_n,  text = "button A")
b2 <- ttkbutton(frame_n,  text = "button B")
b3 <- ttkbutton(frame_n,  text = "button c")
tkgrid(b1, b2, b3)

Допустим, я могу получить доступ только b1:

class(b1)
# [1] "tkwin"

Я хочу получить доступ и изменить братьев и сестер b1 как будто у меня были предметы b2 и т. д. (например):

tkcget(b2, "-text")             # Get text
tkconfigure(b2, text = "New B") # Change text

Используя tkwinfo Мне удалось получить доступ к родителю b1 и получить список братьев и сестер (я не уверен, технически ли это "список"), но я не знаю, как получить доступ / изменить каждый из них по одному:

(parent_of_b1 <- tkwinfo("parent", b1))
# <Tcl> .1.1.1 

(siblings_of_b1 <- tkwinfo("children", parent_of_b1))
# <Tcl> .1.1.1.1 .1.1.1.2 .1.1.1.3 

class(siblings_of_b1)
# "tclObj"

Моя попытка приводит к ошибке:

tkcget(siblings_of_b1, "-text")
# Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : 
#   [tcl] invalid command name ".1.1.1.1 .1.1.1.2 .1.1.1.3".

Скорее всего, я не знаю способ подмножества объекта. Как мне это сделать?

1 ответ

Проблема в том, что winfo children подкоманда (используя основное имя Tcl) возвращает список идентификаторов виджетов Tcl. В общем, это немного беспорядочно для других языков (из-за потенциальных проблем с обработкой правил цитирования), но потому что сгенерированные идентификаторы виджетов просто содержат цифры ASCII и . символы и разделители - это всего лишь один пробел, простое разбиение на пробел даст вам правильную вещь.

(siblings_of_b1 <- strsplit(tkwinfo("children", parent_of_b1), " ", fixed = TRUE))

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

Другие вопросы по тегам