Высота кнопки LTK не настраивается

Я использую LTK для основных окон в Common Lisp. Я хочу создать квадратную кнопку, но получается, что высоту изменить нельзя. Вот соответствующая часть кода:

(let ((tile (make-instance 'button
                           :width 20
                           :height 20))))

Я получаю сообщение об ошибке:

Invalid initialization argument:
  :HEIGHT
in call for class #<STANDARD-CLASS LTK:BUTTON>.
See also:
  The ANSI Standard, Section 7.1.2
  [Condition of type INITARG-ERROR]

В документации LTK высота кнопок указана как настраиваемая. Что-то не так с установкой или это известная ошибка или что?


person Kotlopou    schedule 27.11.2018    source источник


Ответы (1)


Я думаю, что это отсутствует на стороне ltk. С помощью M-. в Slime я перехожу к определению кнопки:

(defargs button (widget)
  command
  compound
  default
  image
  state
  textvariable
  underline
  width)

На самом деле height нет, и оно не происходит от widget.

Я задал вопрос о nodgui (форк ltk с синтаксическим сахаром и дополнительными мета-виджетами), потому что сопровождающий очень хороший: https://notabug.org/cage/nodgui/issues/6

Его ответ:


nodgui поддерживает только те виджеты, которые используют движок темы ttk:

https://www.tcl.tk/man/tcl8.6/TkCmd/ttk_intro.htm

документация для ttk::button:

https://www.tcl.tk/man/tcl8.6/TkCmd/ttk_button.htm

не показывает параметр высоты (поправьте меня, если я ошибаюсь)

(есть ли шанс, что вы просматриваете https://www.tcl.tk/man/tcl8.6/TkCmd/button.htm ? Это версия виджета без ttk и не поддерживается)

Вероятно, вы можете поиграть с атрибутом frame и sticky, чтобы изменить геометрию кнопки (никогда не пробовал), более того, я не знаю, как указать размер кнопки в пикселях.

Надеюсь, это как-то поможет! :)

ps: Вероятно, важно отметить, что документация LTK устарела в части виджетов.


Другая информация для рассмотрения: https://mailman.common-lisp.net/pipermail/ltk-user/2016-June/000625.html

Tcl/Tk до 8.4 включительно позволял устанавливать шрифт для кнопок. С 8.5 стоял набор виджетов ттк, который в какой-то момент стал дефолтным для лтк. Набор виджетов ttk использует движок темы для определения многих параметров рендеринга для виджетов, чтобы добиться «родного» вида. Это означает, что многие старые опции для виджетов были удалены. Вы можете найти документацию для виджета здесь: https://www.tcl.tk/man/tcl8.6/TkCmd/ttk_button.htm

Если вы нажмете :tk84 на features, вы получите виджеты в старом стиле, в противном случае вы, конечно, можете создавать/изменять темы ttk, что также должно дать вам возможность настраивать шрифты. С подобными сообщениями об ошибках было бы очень полезно, если бы вы включили информацию об операционной системе, в которой возникла проблема, lisp, с которым вы используете Ltk, и, в этом случае, снимок экрана.

person Ehvince    schedule 29.03.2019