Установить максимальный размер окна
Как я могу установить максимальный размер окна LTK?
(ql:quickload "ltk")
(defpackage :pub-quiz
(:use :ltk :cl))
(in-package :pub-quiz)
(defun pub-quiz-window ()
(with-ltk ()
(let* ((f (make-instance 'frame :relief :groove :height 500 :width 300))
(pub (make-instance 'label :master f :text "Pub Quiz"))
(outtext (make-instance 'text :font "monospaced" :wrap :word))
(tf (make-instance 'text :font "monospaced")))
(pack f)
(pack pub :side :left)
(pack outtext :ipady 100)
(pack tf))))
Если я установлю размер кадра в высоту и ширину, как в приведенном выше примере кода, мое окно wm не будет учитывать эти значения вообще.
Документы Tk имеют это
wm maxsize .window 500 500
но я не знаю, как перевести это в то, что понимает LTK.
1 ответ
Я не использовал LTK, поэтому я не могу утверждать, что это должно быть сделано; Я просто отвечаю на основании того, что я нашел в Интернете. В разделе 3.7 руководства LTK упоминается, что существует maxsize
функция:
(maxsize toplevel width height)
Установите максимальный размер окна в пикселях.
призвание (maxsize f 500 500)
не работает, хотя Реализация maxsize
является:
(defgeneric maxsize (widget x y))
(defmethod maxsize ((w widget) x y)
(format-wish "wm maxsize ~a ~a ~a" (widget-path w) (tk-number x) (tk-number y))
w)
Перевод номера работает просто отлично, я думаю (ltk::tk-number 500) => 500
, Тем не мение, (widget-path f)
, для f
в вашем коде возвращается .wc
не .window
, как показывает фрагмент кода TK, который вы опубликовали. Вы можете запустить этот код напрямую с
(format-wish "wm maxsize .window 500 500")
но это тоже вызывает ошибку:
Tcl/Tk error: bad window path name ".window"
Я не уверен, какой путь элемента будет работать для вас в этом случае, но, кажется, как только вы нашли это, maxsize
будет делать то, что вам нужно. E сть toplevel
класс и вызов maxsize
с экземплярами, кажется, работает, поэтому, возможно, вам следует изучить
(let* ((f (make-instance 'toplevel :relief :groove :height 500 :width 300))
...)
...
(maxsize f 500 500))
Поэкспериментируя с этим, я могу заставить это работать, хотя этот ярлык "Pub Quiz", похоже, продолжает появляться как отдельное окно…
Я не уверен, что правильно понимаю ваш запрос, но, учитывая заголовок, я полагаю, вы хотите убедиться, что открытое окно не должно выходить за пределы заданного измерения?
Если это так, вам необходимо установить главное окно .
который доступен через *tk*
:
(defun pub-quiz-window ()
(maxsize *tk* 300 300)
(minsize *tk* 300 300)
(let* ((f (make-instance 'frame :relief :groove :height 50 :width 30))
(pub (make-instance 'label :master f :text "Pub Quiz"))
(outtext (make-instance 'text :font "monospaced" :width 10 :height 10))
(tf (make-instance 'text :font "monospaced" :height 10 :width 10)))
(pack f :side :left)
(pack pub :side :left)
(pack outtext :side :left)
(pack tf :side :left)))
(defun create-local-view ()
(with-ltk ()
(pub-quiz-window)))