В предыдущей статье в качестве инструментария для создания графического интерфейса для утилит командной строки на базе Tcl/Tk был рассмотрен конструктор tkBuilder. Конструктор хорош, но как было отмечено в статье обладает и рядом недостатков, главным из которых является отсутствие поддержки UTF-8, а следовательно, и русского алфавита. Еще один недостаток был отмечен пользователем merlin-vrn. Это поддержка на сегодняшний день только Tcl/Tk версии 8.4.

Но вот в комментарии от пользователя svk28 был упомянут конструктор Visual Tcl на базе Tck/Tk:

image

После предварительного ознакомления было решено использовать его в деле, тем более, что предыдущий материал фактически остался незавершенным, если смотреть на него с точки зрения объявленной цели – дать графическую оболочку утилитам командной строки, с помощью которых можно получить доступ к облачному криптографическому токену PKCS#11. Поэтому настала пора разработать графический интерфейс и для второй утилиты, а именно ls11cloud_config:

bash-4.3$ /usr/local/bin64/ls11cloud_config
LS11CLOUD User Utility 
usage:  /usr/local/bin64/ls11cloud_config <command> [-p <password>] [-n <new password>]    
Commands:
   register <host> <port> <id> - register new user on the server 
        duplicate <host> <port> <id> - duplicate user account on other computer 
        change_pswd - change SESPAKE authentication password 
        status      - display current configuration data 
        log         - display server log file 
        recreate    - re-create token to initial empty state 
        unregister  - remove all user files from the server 
NB: Don't use non-latin letters to avoid encoding problems! 
Copyright(C) Ltd (http://soft.lissi.ru) 2017 
bash-4.3$

Первым делом было проверено, какую версию Tcl/Tk поддерживает Visual Tcl. Оказалось, что версия 8.6, которая установлена на моем компьютере, поддерживается конструктором Visual Tcl:

bash-4.3$ cd ../vtcl.vtcl-8.6-master
bash-4.3$ ./configure 
Using /bin/wish8.6
bash-4.3$

Первый запуск конструктора не вдохновил, уж больно много окон появилось на рабочем столе:

image

Но осмотревшись оказалось что пару окон (новостную ленту – Visual Tcl News и знаете ли вы это – Did you know)можно закрывать без всякого ущерба для работы. И оказывается, что окон уже и не так много и, при необходимости, их можно периодически скрывать.

Приятной неожиданностью стало наличие своего мольберта для каждого виджета класса toplevel:

image

В нашем проекте потребовалось три виджета класса toplevel и, соответственно, в нашем распоряжении было три мольберта:

1. Виджет GUICloudConfig, основное окно с функциями утилиты ls11cloudconfig (см. выше);
2. Виджет Password, который так или иначе задействован во всех функциях:

image

3. Виджет CloudToken, который задействуется в функциях Регистрации и Дублирования облачного криптографического токена:

image

И никаких проблем с «великим, могучим, правдивым и свободным русским языком!» (И.С. Тургенев).

Отметим одну особенность дизайнера Visual Tcl. Она связана с редактированием функций. Изменения, вносимые в функции, не попадут в проект до тех пор, пока не будет закрыто окно, в котором редактируется функция:

image

Отметим также, что проект в понимании Visual Tcl сохраняется как файл Tcl/Tk (*.tcl) и его в любой момент можно выполнять самостоятельно без дополнительных преобразований. Обратное не верно, далеко не каждый файл Tcl/Tk конструктор будет рассматривать как свой проект.

На еще одну очень полезную вещь навел проект Visual Tcl – возможность сохранения проекта в бинарном коде. Для этой цели задействуется утилита freewrap, которая превращает скрипты Tcl / Tk в однофайловые исполняемые программы. Так и мы оба скрипта, реализующих графический интерфейс для утилит p11conf и ls11cloudconfig, преобразовали в исполняемые программы:

bash-4.3$ ls 
GUITKP11Conf.tcl  LS11CLOUD_CONFIG.tcl 
bash-4.3$
bash-4.3$ freewrap GUITKP11Conf.tcl
bash-4.3$ freewrap LS11CLOUD_CONFIG.tcl
bash-4.3$ ls 
GUITKP11Conf      LS11CLOUD_CONFIG      
GUITKP11Conf.tcl  LS11CLOUD_CONFIG.tcl 
bash-4.3$

Теперь нам осталось только все (проекты, tcl-скрипты и исполняемые программы) упаковать и выложить для свободного использования. Скачать архив можно здесь.

Большое спасибо пользователю svk28 за его подсказку!
Поделиться с друзьями
-->

Комментарии (7)


  1. caway
    19.07.2017 22:01

    Всегда считал что слово «виджет» мужского рода…


  1. saipr
    19.07.2017 22:02

    Да, вы правы. На автомате. Спасибо.


  1. kAIST
    19.07.2017 23:02
    +1

    Часто использую Tcl/Tk в связке с python (tkinter, ttk). Пробовал разные гуи билдеры, но потом понял что Библиотека настолько проста, что проще и быстрее все сделать ручками.


    1. saipr
      20.07.2017 06:56

      И в этом есть ее плюс


  1. svk28
    20.07.2017 12:22

    Рад что помог =)
    Я когда начинал изучать tcl перепробовал массу всяких программ, в итоге запили свою ide и пользуюсь по сей день (правда редко уже).


  1. saipr
    20.07.2017 12:23

    Редко, но метко. Свой ide — это круто!


  1. saipr
    25.07.2017 11:48
    +1

    Конструктор tkBuilder хорош, но как было отмечено в статье обладает и рядом недостатков, главным из которых является отсутствие поддержки UTF-8, а следовательно, и русского алфавита.

    Этот недостаток tkBuilder, как оказалось, легко снимается. Достаточно в файл file.tcl в функции File::WriteTkbFile и File::ReadTkbFile после строки:


    fconfigure $fileID -translation binary


    вставить следующую строку:
    fconfigure $fileID -encoding utf-8


    И никаких проблем с «великим, могучим, правдивым и свободным русским языком!» (И.С. Тургенев) больше не будет.