Как использовать процедуру tk_optionMenu?

Я пытаюсь разработать графический интерфейс с помощью TCL / Tk, потому что это «макроязык» программного обеспечения для создания сетки Pointwise. Я нашел сообщение, в котором обсуждается использование процедуры под названием tk_optionMenu, которая доступна здесь. Проблема в том, что я не понимаю, как вызывать эту процедуру и как получать различные записи в меню параметров. Мне нужны не числа, а текст для разных подпрограмм. Информация в этой подпрограмме отмечает, что аргументы - это «> = 1», а не текст. Например, мне нужно меню параметров, чтобы пользователь мог выбрать, какой метод сглаживания использовать для сетки. В моем графическом интерфейсе, который я настраиваю с форматированием сетки в TCL, у меня есть несколько мест, где я хочу использовать меню параметров.

Используя то, что предложил Гленн Джекман, я попробовал следующее:

#!/usr/bin/wish
# the next line restarts using wish \
#exec wish "$0" "$@"

# interface generated by SpecTcl version 1.2 from /home/hh-eagle/ab/salter/bin/src/GLYPH/PrismEditor/GUI/PE_v01.ui
#   root     is the parent window for this user interface

package require Tk

proc PE_v01_ui {root args} {

    # this treats "." as a special case

    if {$root == "."} {
        set base ""
    } else {
        set base $root
    }

    label $base.solver \
        -text {Solver:}

    set solvers {TriSmooth QuadSmooth VolSmooth K_lineSmooth}
    tk_optionMenu $base.solvers activeSolver {*}$solvers

    # Add contents to menus

#        $base.solvers.menu add radiobutton -label TriSmooth
#        $base.solvers.menu add radiobutton -label QuadSmooth
#        $base.solvers.menu add radiobutton -label VolSmooth
#        $base.solvers.menu add radiobutton -label K_lineSmooth

    # Geometry management

    grid $base.solver -in $root      -row 2 -column 6 
    grid $base.solvers -in $root     -row 2 -column 7  \
            -columnspan 2

    # Resize behavior management

#       grid rowconfigure $root 1 -weight 0 -minsize 30 -pad 0
#       grid rowconfigure $root 2 -weight 0 -minsize 30 -pad 0
#       grid rowconfigure $root 3 -weight 0 -minsize 30 -pad 0
#       grid rowconfigure $root 4 -weight 0 -minsize 30 -pad 0
#       grid rowconfigure $root 5 -weight 0 -minsize 30 -pad 0
#       grid rowconfigure $root 6 -weight 0 -minsize 30 -pad 0
#       grid rowconfigure $root 7 -weight 0 -minsize 30 -pad 0
#       grid rowconfigure $root 8 -weight 0 -minsize 30 -pad 0
#       grid rowconfigure $root 9 -weight 0 -minsize 30 -pad 0
#       grid columnconfigure $root 1 -weight 0 -minsize 30 -pad 0
#       grid columnconfigure $root 2 -weight 0 -minsize 30 -pad 0
#       grid columnconfigure $root 3 -weight 0 -minsize 30 -pad 0
#       grid columnconfigure $root 4 -weight 0 -minsize 30 -pad 0
#       grid columnconfigure $root 5 -weight 0 -minsize 30 -pad 0
#       grid columnconfigure $root 6 -weight 0 -minsize 30 -pad 0
#       grid columnconfigure $root 7 -weight 0 -minsize 2 -pad 0
#       grid columnconfigure $root 8 -weight 0 -minsize 2 -pad 0
#       grid columnconfigure $root 9 -weight 0 -minsize 30 -pad 0
#       grid columnconfigure $root 10 -weight 0 -minsize 30 -pad 0
# additional interface code
# end additional interface code

}

# Allow interface to be run "stand-alone" for testing

catch {
    if [info exists embed_args] {
        # we are running in the plugin
        PE_v01_ui .
    } else {
        # we are running in stand-alone mode
        if {$argv0 == [info script]} {
            wm title . "Testing PE_v01_ui"
            PE_v01_ui .
        }
    }
}

Когда я запускаю это, я получаю пустое поле с опциями вверху, чтобы свести к минимуму или закрыть его. Раскомментирование или комментирование информации о конфигурации столбца и строки не имело никакого значения. Заполнение optionMenu с использованием закомментированных строк в отличие от {*}solvers также не имело никакого значения. Итак, что-то не так, и я понятия не имею, что именно.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
258
1

Ответы 1

Вот небольшая демонстрация:

#!/usr/bin/env tclsh
package require Tk

set choices {foo bar baz qux "None of the above"}
label .menuLabel -text "Make a selection: "
# "choice" is a global variable
tk_optionMenu .menu choice {*}$choices

label .displayLabel -text "You chose: "
label .display -textvariable choice

grid .menuLabel .menu
grid .displayLabel .display

Другие вопросы по теме