【问题标题】:set maximum window size设置最大窗口大小
【发布时间】:2013-10-05 06:28:37
【问题描述】:

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

【问题讨论】:

  • 我冒昧地格式化了您的代码,因为很难分辨 let 的变量在哪里结束以及正文从哪里开始。您可以发布某人需要的额外代码来测试它吗?例如,*questions*format-quiz 的定义。另外,请注意,此定义需要在使用包 LTK 的上下文中(例如,with-ltkpackframelabel 等,都在 LTK 中包。
  • 谢谢,我添加了包定义。

标签: common-lisp tk ltk


【解决方案1】:

我没有使用过 LTK,所以我不能对 supposed 如何做到这一点提出太多要求;我只是根据我在网上找到的答案来回答。 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 sn-p 所示。您可以直接运行该代码

(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”标签似乎一直作为一个单独的窗口出现......

【讨论】:

    【解决方案2】:

    我不确定我是否正确理解了您的查询,但鉴于标题,我假设您希望确保打开的窗口不能扩展到给定尺寸之外?

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

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 2019-02-25
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2022-11-28
      相关资源
      最近更新 更多