2013-09-29 173 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)) 

玩了,我可以排序得到那個工作,儘管「酒吧測驗「標籤似乎不斷出現作爲一個單獨的窗口... ...