Tcl / Tk: кнопка ввода - получение значений при вводе без пропуска ввода - PullRequest
1 голос
/ 03 августа 2011

Я реализую запись и кнопку со следующими функциями.При нажатии на кнопку я получу список кнопок проверки.После выбора кнопок проверки они должны быть отражены в записи.Ниже моя реализация.Единственное, что мне не нравится, это передача записи (.e) обоим get_values и myok.Есть ли лучшее решение моей проблемы?

entry  .e -width 15 -relief sunken
button .b -text "..." -command [list get_values .e]
pack .e .b -side left

proc get_values { entry } {
  toplevel .values

  checkbutton .values.c1 -text "C1" -variable c1
  checkbutton .values.c2 -text "C2" -variable c2
  button .values.ok -text "OK" -command [list myok $entry .values]
  button .values.cancel -text "Cancel" -command [list mycancel .values]

  pack .values.c1 .values.c2 -side top
  pack .values.cancel .values.ok -side right
}

proc myok { entry warg } {
 variable c1
 variable c2

 $entry delete 0 end

 if { $c1 } {
  $entry insert insert " "
  $entry insert insert "c1"
 }

 if { $c2 } {
  $entry insert insert " "
  $entry insert insert "c2"
 }

 destroy $warg
}

proc mycancel { warg } {
 destroy $warg
}

1 Ответ

3 голосов
/ 03 августа 2011

Вы можете связать переменную с записью и использовать ее для обновления текста записи.

entry  .e -width 15 -relief sunken -textvariable e

(при изменении переменной e запись будет обновляться соответственно)

в этом случае вы должны передать имя связанной переменной вместо имени экземпляра записи, если вы хотите реализовать универсальные функции get_values и myok.Если эта запись является единственной, вы, конечно, можете жестко задавать имена вместо передачи.

В любом случае, я не вижу никакой ошибки в вашей реализации.

...