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 はこれらの値をまったく尊重しません。

Tkドキュメントにはこれがあります

wm maxsize .window 500 500

しかし、これをLTKが理解できるものに変換する方法がわかりません。

4

2 に答える 2

1

私は LTK を使ったことがないので、これがどのように行われるべきかについてはあまり主張できません。ネットで調べたことをもとに回答しています。LTK マニュアルのセクション 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)投稿したTKスニペットが示すように、コード内の はではなくをf返します。そのコードを直接実行できます.wc.window

(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」というラベルが別のウィンドウとして表示され続けているようです…</p >

于 2013-09-30T15:39:42.640 に答える