LINUX.ORG.RU

ltk. Дочерние окна.


0

0

Доброго времени суток.

Необходимо - создать окно по нажатию кнопки, пеключить в него фокус и создать свои независимые элементы. В идеале запретить переключения фокуса на родительское окно.

(defun main()
  (ltk:with-ltk ()
    (let* ((btn1 (make-instance 'ltk:button
				:text "new"
				:command (lambda () (sub-win))))
	   (btn2 (make-instance 'ltk:button
				:text "exit"
				:command (lambda () (setf ltk:*exit-mainloop* T)))))
      (ltk:pack btn1)
      (ltk:pack btn2))))

(defun sub-win ()
  (ltk:with-ltk ()
    (let* ((btn1 (make-instance 'ltk:button
				:text "exit"
				:command (lambda () (setf ltk:*exit-mainloop* T)))))
      (ltk:pack btn1))))

В таком варианте не могу найти, как переключить фокус на новое окно и заблокировать родительское. Также окна становятся совсем независимыми, и можно закрыть родительское, оставив дочернее работать.

(defun main()
  (ltk:with-ltk ()
    (let* ((btn1 (make-instance 'ltk:button
				:text "new"
				:command (lambda () (sub-win))))
	   (btn2 (make-instance 'ltk:button
				:text "exit"
				:command (lambda () (setf ltk:*exit-mainloop* T)))))
      (ltk:pack btn1)
      (ltk:pack btn2))))
(defun sub-win ()
  (make-instance 'ltk:toplevel)
    (let* ((btn1 (make-instance 'ltk:button
				:text "exit"
				:command (lambda () (setf ltk:*exit-mainloop* T)))))
      (ltk:pack btn1)))
В таком варианте все виджеты создаются не на новом окне, а родительском. Перепись *tk* результата не даёт. Также возникает проблема с закрытием дочернего окна, так как не совсем понятно как.

В мане с оф сайта найти ответы не удалось.

(defun sub-win ()
    (let* ((tl (make-instance 'ltk:toplevel))
	   (btn1 (make-instance 'ltk:button
				:master tl
				:text "exit"
				:command (lambda () (setf ltk:*exit-mainloop* T)))))
      (ltk:pack btn1)))

Вот так решилась проблема с наполнением дочерней формы. Осталась с её закрытием.

ryukzak
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.