Удаленный графический интерфейс с LTK не открывает окно

Что я пытаюсь сделать: у меня есть уже существующая игра, в которой используется LTK для его пользовательский интерфейс. Игра содержит множество кнопок, холстов и окон. Я хотел бы получить доступ к графическому интерфейсу с удаленного компьютера через ltk-remote, как описано в разделе 7 связанного руководства.

Что я сделал: я быстро загрузил ltk-remote, запустил (with-remote-ltk 9898 form), форма была функцией запуска игры, затем запустил wish remote.tcl localhost 9898 в терминале. (Номер порта 9898 является произвольным.) Это привело к проблеме, описанной пользователем @Sim в этот вопрос, который я решил, используя их ответ. Это могло вызвать проблемы (как предполагает Сим).

Проблема: GUI запускается, но лишь частично реагирует на некоторые события. Самый простой изолированный эффект заключается в том, что когда событие предлагает открыть новое окно, оно не открывается. Если нужно открыть больше окон, откроются все, кроме первого. Это минимальный пример:

(ltk:with-remote-ltk 9898 nil
    (let ((b (make-instance 'ltk:button)))
      (setf (ltk:command b) #'(lambda ()
                                (make-instance 'ltk:toplevel :title "title 1")
                                (make-instance 'ltk:toplevel :title "title 2")
                                (make-instance 'ltk:toplevel :title "title 3")))
      (ltk:grid b 0 0)))

При нажатии на кнопку открывается только заголовок 2 и заголовок 3.

Я не видел никаких свидетельств того, что кто-либо успешно использовал ltk-remote, и, таким образом, сама библиотека могла быть взломана. Может ли кто-нибудь поделиться своим опытом?


person Kotlopou    schedule 16.06.2021    source источник
comment
Если я использую измененный remote-client.tcl в своем ответе на stackoverflow.com/a/68035159/124319, то всякий раз, когда я нажимаю на кнопка, появляются три окна верхнего уровня (sbcl, linux)   -  person coredump    schedule 18.06.2021
comment
Если я запускаю remote-client.tcl (модифицированный или нет) вместо remote.tcl, события вообще не влияют на графический интерфейс. Вместо этого они просто печатаются в терминале, из которого я его запускаю. Если я изменю remote-client.tcl, а затем запущу remote.tcl, рассматриваемая ошибка сохранится.   -  person Kotlopou    schedule 18.06.2021
comment
Ошибка была на моей стороне - я ушел в строку из другого ответа в связанном вопросе. Я не уверен, что делать с этим вопросом сейчас, так как вся необходимая информация содержится в другом вопросе.   -  person Kotlopou    schedule 21.06.2021
comment
Круто, хорошо, если это работает. Совершенно нормально, если вы напишете краткий ответ, в котором обобщите то, что работает (например, вы можете указать ссылку на другой ответ) и примете его.   -  person coredump    schedule 21.06.2021