You are not logged in.
Pages: 1
Читая ньюсы slitaz обнаружил намерение разработчиков в 5-й версии отказаться от gtkdialog в пользу "жабы".
Сам по себе gtkdialog очень маленький и почти без зависмостей, что важно/ценно.
И еще он хорошо юзает возможности zenity (который есть в slitaz по умолчанию).
Хочу проинформировать, что gtkdialog можно юзать не только в связке с sh/bash, но и в СИ (без плюсов)
http://linuxforum.ru/viewtopic.php?pid=287604#p287604
маленький пример на чистом СИ
http://www.murga-linux.com/puppy/viewtopic.php?p=639831#639831
Это если нужна скорость работы программы и нет времени изучать нюансы GTK-программирования.
Offline
Я извиняюсь, «жаба» — это… что?
Offline
> Я извиняюсь, «жаба» — это… что?
Java
Не могу снова найти эту инфу.
Offline
Тут или что-то было понято неправильно, или суровые разработчики замели следы 
Я не видел ничего жирнее и неповоротливей, чем Java. Не место ей на микро-системе.
Offline
Для тех, кто пока только присматривается к программированию, но не знает с чего начать,
повторю в более развернутом виде свой первый пост.
gtkdialog - простой инструмент создания окон на bash-script
-----------------------------------------------------------
Все пользователи всех Линуксов постоянно используют для работы своей ОС кучу самых разнообразных скриптов, зачастую и не подозревая об их существовании.
Но некоторые скрипты (некоторые их функции) разаботчики связывают с графическими окнами, которые позволяют задавать пользователю вопросы, получать ответы и на их основании выполнять некоторые действия.
Диалоговые (и не только) окна в Линукс - простое средство создания.
-------------------------------------------------------------------
Есть в Линуксе библиотека zenity, позволяющая "визуализировать" простейшие скриптовые диалоги.
Например:
#!/bin/bash
if zenity --question --text="Please press a button."; then
zenity --info --text="You pressed Yes\!"
else
zenity --error --text="You pressed No\!"
fi
Выведет окно "Question" с кнопками "No" "Yes"
Но zenity может не так много.
gtkdialog опирается на zenity и добавляет к ней многие функции/возможности GTK+
(GTK, GTK2, GTK+ это абревиатуры инструментов/библиотек графического программирования в Линукс).
При этом не требуется добавлять в систему монстров графического программирования.
В любом "блокноте" пишется bash-script или СИ-функция/функции. И все!
gtkdialog имеет много хороших примеров bash-script.
Автор Laszlo Pere предоставил возможность делать программы и на языке СИ, но пример такой программы всего один (и очень маленький).
Возможности программы gtkdialog в этом случае значительно беднее, чем у bash-script.
Некоторые пользователи могут писать на bash-script хуже, чем на СИ (как я например).
Учитывая это я сделал пример на языке СИ.
Конструкции gtkdialog для СИ не позволяют например такие вещи:
<window window_position="1" title="System Tools">
или:
<action when="file-activated">echo File: $FILE </action>
Это удалось обойти таким способом:
"<action>cat [ echo $FILE ] | zenity --text-info --width=720 --height=400 --title $FILE</action>"
Но даже с такими ограничениями мне было интересно сделать программу, которая не требует тяжелых библиотек (так я во всяком случае думаю).
Свой пример на СИ и скриншот положил на мурге:
http://www.murga-linux.com/puppy/viewtopic.php?p=639831#639831
(после этого тема там немного оживилась)
Это тема " Gtkdialog Development"
http://www.murga-linux.com/puppy/viewtopic.php?t=69188
Все примеры на bash-script лежат:
http://code.google.com/p/gtkdialog/
там же можно скачать и пакет обновленный энтузиастами в сентябре 2011 года
gtkdialog-0.8.0.tar.gz 404 KB
GtkDialog - tips (подсказки)
http://www.murga-linux.com/puppy/viewtopic.php?t=38608
Авторский пакет 0.56--0.7.10 (сентябрь 2003 - ноябрь 2006) находится:
http://www.mmnt.net/db/0/0/gamma.ttk.pte.hu/pub/gtkdialog
я пользовался gtkdialog-0.59.8.tar.gz 234 KB (июль 2005 года)
но версия 0.8.0 гораздо богаче...
И до кучи примеры с иллюстрациями:
Creating a GUI with GTKDialog
http://pclosmag.com/html/Issues/200910/page21.html
http://xpt.sourceforge.net/techdocs/language/gtkdialog/gtkde02-GtkdialogExamples/single/
почти учебник:
http://hizoka.funcenter.fr/linux/gtkdialog.pdf
Диалоги на самые разные вкусы:
http://freecode.com/projects/xdialog
http://invisible-island.net/dialog/
http://hightek.org/dialog/
http://xdialog.free.fr/
http://code.google.com/p/yad/
Если начать с запуска скриптов-примеров, а продолжть это их чтением, легкой модификацией и повторным запуском, то освоение предмета может оказаться проще, чем чтение пугающе толстых книжек.
Чтение этих книжек потребуется на более поздних этапах практического использования этого инструмента.
Offline
Тема "screenshot снимок экрана" уже распухла, поэтому выкладываю новые изыскания по gtkdialog здесь.
Это просто этюд по созданию чего-то более сложного, чем одно окно. Смотрите "About" и текст скрипта.
#!/bin/sh
funccommand () {
if [ "$COMBOBOX1" == "All" ]; then
COMMAND1="-m"
else COMMAND1="-s"
fi
## !!! Attention: This works in scrot ver. >= 0.8 only !!!
if [ "$COMBOBOX1" == "Window" ]; then
COMMAND1="-u"
fi
COMMAND2="$COMBOBOX2"
COMMANDSTRING="$COMMAND1-b-d $COMMAND2"
_dir=[c]dirname "$FILE"[/c]
cd "${_dir}"
echo FILE= "${_dir}"
scrot "$COMMANDSTRING"
}
export ABOUT='
<window title="About Message">
<frame About scripting & gtkdialog. Text-widget example:>
<text>
<width>360</width>
<height>250</height>
<variable>PROGRAM</variable>
<label>This program is only demonstration of some possibilities of sharing of the program gtkdialog and bash-script. Here are specially used menubar and a main window with widgets. !!!Attention. It is only demo!!!</label>
</text>
</frame>
</window>
'
export HELP='
<window title="Help Message">
<frame Help from gtkdialog. Edit-widget example:>
<edit>
<input file>tmp.text</input>
<width>400</width><height>350</height>
<default>"default text of the editor"</default>
<variable>EDIT</variable>
</edit>
</frame>
</window>
'
export MAIN_DIALOG="
<window>
<frame MenuBar & gtk-widgets in MAIN_DIALOG>
<vbox>
<vbox>
<menubar>
<menu>
<menuitem><label>About</label>
<action>Launch:ABOUT</action>
</menuitem>
<menuitem><label>EXIT</label>
<action>exit:Quit</action>
</menuitem>
<label>About</label>
</menu>
<menu>
<menuitem><label>AbiWord</label>
<action>abiword</action>
</menuitem>
<menuitem><label>Gnumeric</label>
<height>32</height>
<action>gnumeric</action>
</menuitem>
<menuitem><label>PCmanFM</label>
<action>pcmanfm</action>
</menuitem>
<label>Run-Programs</label>
</menu>
<menu>
<menuitem><label>current date</label>
<action>date>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<menuitem><label>tazpkg help</label>
<action>tazpkg --help>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<menuitem><label>help export</label>
<action>man export>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<menuitem><label>help cd</label>
<action>man cd>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<menuitem><label>busybox</label>
<action>busybox>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<label>Help</label>
</menu>
</menubar>
<hbox>
<combobox>
<width>60</width>
<variable>COMBOBOX1</variable>
<item>All</item>
<item>Window</item>
<item>Area</item>
<action>save:COMBOBOX1</action>
</combobox>
<combobox>
<width>20</width>
<variable>COMBOBOX2</variable>
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>5</item>
<item>10</item>
<item>20</item>
<action>save:COMBOBOX2</action>
</combobox>
<button>
<label>ACCEPT</label>
<action>$0 func</action>
</button>
<button cancel>
<action>rm tmp.text</action>
<action>exit:Quit</action>
</button>
</hbox>
<frame DubleClick ANY file in selected dir>
<chooser>
<width>200</width>
<height>200</height>
<variable>FILE</variable>
<default>/home/</default>
<action>$2= $FILE</action>
</chooser>
</frame>
</vbox>
</vbox>
</frame>
</window>
"
case $1 in
func) funccommand $2 ;;
*) gtkdialog --program=MAIN_DIALOG ;;
esac
Для того, чтобы скрипт (а точнее gtkdialog) мог вызвать функцию funccommand () пришлось делать:
export MAIN_DIALOG="
<window>
... ... ...
</window>
"
такая форма записи (через " ... ") менее удобна и ограничена в функциональности
в отличии от более удобной записи (через ' ... ') для других окон:
export ABOUT='
<window title="About Message">
... ... ...
</window>
'
export HELP='
<window title="Help Message">
... ... ...
</window>
'
Offline
ScreenShot + gtkdialog с некоторыми модификациями/исправлениями.
2 варианта: бинарный gcc + GTK2 и скриптовый.
mediafire-download:
http://www.mediafire.com/?l79j1cb2ll4gbhc
http://www.mediafire.com/?mzill1xlng47g31
Offline
gtkdialog понравился настолько, что разобрался с меню (menu-bar) и иконками (для красоты).
Прикладываю скриншот.
Если кому будет интересно - выложу код скрипта.
[attachment=19162,806]
Offline
ой, выложи, пожалуйста, интересно))))
Offline
[c]#!/bin/sh
## icon-name="gcolor2"icon-name="exec"
GTKDIALOG=gtkdialog
funccommand () {
if [ "$COMBOBOX1" == "All" ]; then
COMMAND1="-m"
else COMMAND1="-s"
fi
## !!! Attention: This works in scrot ver. >= 0.8 only !!!
if [ "$COMBOBOX1" == "Window" ]; then
COMMAND1="-u"
fi
COMMAND2="$COMBOBOX2"
COMMANDSTRING="$COMMAND1-b-d $COMMAND2"
_dir=$(dirname "$FILE")
cd "${_dir}"
scrot "$COMMANDSTRING"
}
export ABOUT='
<text>
<variable>PROGRAM</variable>
<label>This program is only demonstration of some possibilities of sharing of the program gtkdialog and bash-script. Here are specially used menubar and a main window with widgets. Also as well as various methods of a call of functions. See FileChooser in menubar & DIR-icon in main-window. !!!Attention: It is only demo!!!</label>
</text>
<action>echo PROGRAM= $PROGRAM</action>
'
export HELP='
<frame Help from gtkdialog. Edit-widget example:>
<edit>
<input file>tmp.text</input>
<width>400</width><height>350</height>
<default>"default text of the editor"</default>
<variable>EDIT</variable>
</edit>
</frame>
'
export CHOOSER='
<frame DubleClick any file in Selected DIR for save screenshot & close dialog>
<chooser>
<width>360</width>
<height>250</height>
<variable>FILE</variable>
<default>/home/</default>
<action>save:FILE</action>
<action>echo FILE= $FILE</action>
</chooser>
</frame>
'
export MAIN_DIALOG='
<window title="GtkDialog & MenuBar" icon-name="exec" resizable="false" width-request="340" height-request="190">
<vbox>
<vbox spacing="10">
<menubar>
<menu>
<menuitem stock="gtk-open">
<action>echo You selected the open menu item</action>
</menuitem>
<menuitem stock="gtk-save">
<action>echo You selected the save menu item</action>
</menuitem>
<separator></separator>
<menuitem stock="gtk-quit">
<action>exit:Quit</action>
</menuitem>
<label>File</label>
</menu>
<menu>
<menuitem icon="abiword">
<label>AbiWord</label>
<action>abiword &</action>
</menuitem>
<menuitem icon="gnumeric">
<label>Gnumeric</label>
<action>gnumeric &</action>
</menuitem>
<menuitem icon="gimp">
<label>Gimp</label>
<action>gimp &</action>
</menuitem>
<separator></separator>
<menuitem icon="fileopen">
<label>FileChooser</label>
<action>Launch:CHOOSER</action>
</menuitem>
<label>Run-Programs</label>
</menu>
<menu>
<menuitem icon="time">
<label>current date</label>
<action>date>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<separator></separator>
<menuitem icon="abiword">
<label>abiword help</label>
<action>abiword --help>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<menuitem icon="help">
<label>help mount</label>
<action>man mount>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<menuitem icon="help">
<label>help sh</label>
<action>man sh>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<separator></separator>
<menuitem label="busybox">
<action>busybox>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<label>Help</label>
</menu>
<menu>
<menuitem stock="gtk-about">
<action>Launch:ABOUT</action>
</menuitem>
<separator></separator>
<menuitem icon="gtk-about">
<label>gtkdialog about</label>
<action>gtkdialog --help>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<menuitem icon="info">
<label>gtkdialog version</label>
<action>gtkdialog -v>tmp.text</action>
<action>Launch:HELP</action>
</menuitem>
<label>About</label>
</menu>
</menubar>
<hbox>
<entry>
<input>date</input>
<variable>FILE</variable>
</entry>
<button>
<input file stock="gtk-open"></input>
<action>Fileselect:FILE</action>
<action>echo FILE= $FILE</action>
<action>Refresh:StatusBar</action>
</button>
</hbox>
<frame Screen-Shoter>
<hbox>
<button cancel>
<action>rm tmp.text</action>
<action>exit:Quit</action>
</button>
<combobox width-request="90">
<variable>COMBOBOX1</variable>
<item>All</item>
<item>Window</item>
<item>Area</item>
<action>save:COMBOBOX1</action>
</combobox>
<combobox width-request="60">
<variable>COMBOBOX2</variable>
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>5</item>
<item>10</item>
<item>20</item>
<action>save:COMBOBOX2</action>
</combobox>
<button>
<label>ACCEPT</label>
<action>'"$0 func"'</action>
</button>
</hbox>
</frame>
<vseparator height-request="2"></vseparator>
<statusbar has-resize-grip="false">
<variable>StatusBar</variable>
<label>StatusBar</label>
<input file>inputfile</input>
<sensitive>true</sensitive>
</statusbar>
</vbox>
</vbox>
</window>
'
case $1 in
func) funccommand $2 ;;
-d | --dump) echo "$MAIN_DIALOG" ;;
*) $GTKDIALOG --program=MAIN_DIALOG ;;
esac[/c]
--------------------------------------------------------------------------------
Примечания:
1. <label>This program is only ... ... ... It is only demo!!!</label> должно быть ОДНОЙ строкой.
2. эти 2 строки все, что смог получить от элемента StatusBar
<action>Refresh:StatusBar</action>
<input file>inputfile</input>
первая обновляет содержимое строки в StatusBar
вторая читает то, что надо поместить в StatusBar из файла inputfile
файл inputfile должен быть в том же DIR, что и сам скрипт.
3. в ОС slitaz и других маленьких линукс-системах (например puppy-linux) иконки "находятся",
а в linux-ubuntu иконки не "находятся", разбираться с этим не стал.
Мне достаточно меню только с текстами (иконки только из любопытства).
4. тема gtkdialog наиболее активна на конференции
http://murga-linux.com/puppy/viewtopic.php?t=69188
http://murga-linux.com/puppy/viewtopic.php?t=38608
там есть даже ветка связки gtkdialog--bacon (бейсик).
Offline
Кхм, я извиняюсь. Я чуть подправил предыдущий пост — поставил в начале и в конце листинга по символу [c]`[/c] и внутри изменил в одной строке применяемые там обратные кавычки на конструкцию $(код).
Я уверен, что листинг, оформленный «лесенкой», читается легче. Но, вот только с длинными строками ничего не поделаешь. В одинарных кавычках символ \ в конце строки не работает. So, let it be…
2 sklimkin
Здорово ведь осваивать новые вещи! Здорово, когда получается! Искренне поздравляю.
К сожалению, код у меня не то, что бы не заработал, но, мой gtkdialog никак не переваривает vseparator и statusbar.
Но даже и без них диалог смотрится просто здорово! Как обычная программа, и не скажешь, что это скрипт.
Offline
Pages: 1
[ Generated in 0.019 seconds, 7 queries executed - Memory usage: 1.61 MiB (Peak: 1.77 MiB) ]