2013-09-29 175 views
0

如何设置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完全不尊重这些值。

传统知识文档有这个

wm maxsize .window 500 500 

,但我不知道怎么翻译弄成LTK明白这一点。

+1

我冒着格式化你的代码的自由,因为很难判断'let'的变量在哪里结束以及身体何处开始。你能发布其他人需要测试的代码吗?例如,“*问题*”和“格式测验”的定义。此外,需要注意的是,这个定义需要在使用包'LTK'的情况下(例如'with-ltk','pack','frame','label'等等都在' LTK'包 –

+0

谢谢,我添加了包的定义。 – martin

回答

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)) 

玩了,我可以排序得到那个工作,尽管“酒吧测验“标签似乎不断出现作为一个单独的窗口... ...