设置最大窗口大小

时间:2013-09-29 09:37:21

标签: common-lisp tk ltk

如何设置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所理解的内容。

2 个答案:

答案 0 :(得分:1)

我没有使用过LTK,所以我无法对如何假设做出怎样的声明;我只是根据我在网上找到的内容回答。 LTK manual在第3.7节中提到有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就会做你需要的。有一个toplevel类,调用maxsize的实例似乎有效,所以也许你应该探索

(let* ((f (make-instance 'toplevel :relief :groove :height 500 :width 300))
       ...)
  ...
  (maxsize f 500 500))

玩弄它,我可以那种让它起作用,虽然“Pub Quiz”标签似乎一直显示为一个单独的窗口......

答案 1 :(得分:0)

我不确定我是否正确理解了您的查询,但是给定标题后,我假设您想确保打开的窗口一定不能超出给定的尺寸?

如果是这样,则必须设置主窗口.,可通过*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)))