[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: SOF: Tcl/Tk



On 2002.12.26 at 18:45:32 +0300, Denis Dzyubenko wrote:

> >> Как писать портируемые программы - в Linux'е я в качестве начального
> >> пути к файлам использую $env(HOME), но в windows нет такой переменной
> >> окружения?
> VW> 
> VW> if {$tcl_platform(platform) == "unix" } {
> VW>   set initial_path $env(HOME)
> VW> } elseif {$tcl_platform(platform) == "windows" } {
> VW>   set initial_path $env(USERPROFILE)
> насколько я понимаю это только для NT? в 98 вроде не определен 
> USERPROFILE

Ну, дальнейшее разбирательство с tcl_platform или просто фаллбэк
поможет. Фаллбэк может быть такой

if { [info exists env(USERPROFILE)]} {
   set intitial_path $env(USERPROFILE) 
} else {
   set initial_path {c:\\WINDOWS\Мои документы}
   # Лучше конечно воспользоваться какой-то переменной. Но кто ж их
   # знает, какие они в DOS-based виндах бывают.
}

> >> Как изменить класс моего окна? Обычно класс = имя приложения, но можно
> >> ли сделать по другому? 
> >> toplevel -class ClassName создает новое окно с указанным класом. А как
> >> изменить класс у главного (т.е. самого первого) окна приложения?
> VW> 
> VW> Хорошего способа не знаю. В принципе wish -class дает требуемый
> VW> результат, но мне не удавалось засунуть это в строчку с #!
> О, точно! вот так работает:
> =+==
> #!/bin/sh 
> # the next line restarts using wish \
> exec wish "$0" -class "wndclass" "$@"
> =+==

> Это из хэлпа, хотя я не понимаю почему такая конструкция работает.

Конструкцмя работает потому что

1. Сначала эту штуку интерпретирует shell. Для него \ в конце строки
комментария не является признаком продолжения комментария на следующую
строку. Поэтому он выполняет команду exec wish

2. Команда exec приводит к тому, что выполнение shell-а прекращается,
поэтому все что дальше в этом файле написано на tcl он за синтаксические
ошибки не считает.

3. wish начинает интерпретировать файл и видит в нем комментарий,
который продолжается на следующую строчку. Он этот комментарий
пропускает, и exec wish  пропускается как его часть.


> >> Для чего существует команда option get и как ее использовать?
> VW> 
> VW> Для того, чтобы получить значение опции из option database. Там
> VW> можно хранить не только те опции виджетов, которые виджеты подбирают
> VW> автоматически, но и любые другие конфигурационные данные.
> т.е. option db != xrdb ?  даже optiondb > xrdb ?
> 
> VW> Например, если ты пользуешься тэгами в текстовом виджете, то цвета 
> VW> шрифта помеченного тэгом автоматически из optiondb не подберутся.
> VW> А с помощью $widget tag configure -fg [option get $widget mytagfont TagFont]
> VW> ты ее оттуда добудешь.
> вот так не работает
> option readfile ~/.Xdefaults
> puts "[option get . myfont font]"

Видимо, потому что название класса обязано начинаться с большой буквы.

> В ~/.Xdefaults
> *myfont*font: sdssd

Эта команда get
ищет либо
myapp.myfont
Myapp.myfont
*myfont

Еще искала бы 
myapp.Font
Myapp.Font
и *Font, 

если бы класс был прописан с большой буквы.




-- 
Victor Wagner			vitus@ice.ru
Chief Technical Officer		Office:7-(095)-748-53-88
Communiware.Net 		Home: 7-(095)-135-46-61
http://www.communiware.net      http://www.ice.ru/~vitus



Reply to: