ngcgui
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
ngcgui
NGCGUI - установка, настройка, описание, примеры.
Примеры
Файлы подпрограмм
NGCGUI это утилита для использования в EMC2 подпрограмм,т.н. мастеров.
Ссылки
http://www.youtube.com/watch?v=Bn8T5Fw0ISs
http://www.linuxcnc.org/docs/2.5/html/g ... ha:O-Codes - О-коды
Установка
Для установки в EMC2 версии 2.4 нужны 4 файла: Положить файлы в папку с конфигурацией станка.
Более удобным будет поместить в отдельную папку,тогда можно их использовать для разных кофигураций.
Прописать в ini файле в секции [DISPLAY] пути к этим файлам:
(пример из моего ini файла) Обратите внимание: : ngcgui_app.tcl должен предшествовать ngcgui_ttt.tcl
Теперь создаем нашу первую вкладку следующей строкой - пока без названия: Запускаем,проверяем: Настройка
Теперь создаем сам файл подпрограммы для нашей вкладки.
Он должен быть такого вида: имя- имя подпрограммы,имя файла и название нашей вкладки.
тело подпрогр- g-код, который мы напишем.
Назовем файл lathe (пример будет из токарной обработки): Окончание файлов должно быть .ngc
Помещаем наш файл lathe.ngc в папку прописанную в ini [DISPLAY]PROGRAM_PREFIX и прописываем путь к ней там же: Проверяем: Кстати,загружаемый по умолчанию EMC файл можно изменить в ini [DISPLAY]
если прописать так
не загр. ничего.(как на скриншоте выше.)
Напишем тело нашей подпрограммы.
Его надо начинать с набора инструкций, которые определяют параметры : Смотрим: Каждая строка появилась во вкладке с возможностью редактировать данные.
Теперь мы в нашей подпрограмме (в g-коде) можем (и будем) использовать переменные.
Например,вмето T1M6 пишем T#<RToolNumber> M6
После набора инструкций (их может быть до 30) непосредственно сам G-код: Сам файл: Запускаем,на вкладке нажимаем "Create feature" ,потом "Finalize"
Получаем запрограммированную траекторию: Описание
Примеры
Как объеденить несколько подпрограмм
В программу могут быть объеденены несколько копий как одной подпрограммы, так и разные подпрограммы.
Как это выглядит на практике:
у нас есть 6 вкладок с подпрограммами для фрезерной обработки: Объеденим их все в одну программу. Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
Этим мы передали наши параметры в создаваемый ngcgui файл auto.ngc. Изменим некоторые параметры(например координаты начала обработки) Нажмем еще раз "CreateFeature".В файл auto.ngc передались также и новые параметры.Нажимаем "Finalize"-загружаем готовый файл с двумя подпрограммами: Чтобы объеденить подпрограммы с разных вкладок :
1.Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
2.Переходим на нужную вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
3.Повторяем,если необходимо.
4.Нажимаем "Finalize".
5. Соглашаемся создать из всех вкладок. Удобней объеденять несколько одинаковых контуров так:
1.создаем из требуемой вкладки копию нажатием кнопки "new"
2.нажимаем "Subfile" ,открываем файл(в нашем случае тот же,что и на первой вкладке)
3.повторяем необходимое число раз
4.корректируем параметры для каждой копии
5.объеденяем все,соблюдая нужную нам последовательность обработки. 5. Соглашаемся создать из всех вкладок. Файлы подпрoграмм
для токарной обработки шаблон цикла
сфера
конус по его длине
обработка наружной цилиндрической поверхности
расточка для фрезерной обработки цилиндрический карман
Примеры
Файлы подпрограмм
NGCGUI это утилита для использования в EMC2 подпрограмм,т.н. мастеров.
Ссылки
http://www.youtube.com/watch?v=Bn8T5Fw0ISs
http://www.linuxcnc.org/docs/2.5/html/g ... ha:O-Codes - О-коды
Установка
Для установки в EMC2 версии 2.4 нужны 4 файла: Положить файлы в папку с конфигурацией станка.
Более удобным будет поместить в отдельную папку,тогда можно их использовать для разных кофигураций.
Прописать в ini файле в секции [DISPLAY] пути к этим файлам:
(пример из моего ini файла) Обратите внимание: : ngcgui_app.tcl должен предшествовать ngcgui_ttt.tcl
Теперь создаем нашу первую вкладку следующей строкой - пока без названия: Запускаем,проверяем: Настройка
Теперь создаем сам файл подпрограммы для нашей вкладки.
Он должен быть такого вида: имя- имя подпрограммы,имя файла и название нашей вкладки.
тело подпрогр- g-код, который мы напишем.
Назовем файл lathe (пример будет из токарной обработки): Окончание файлов должно быть .ngc
Помещаем наш файл lathe.ngc в папку прописанную в ini [DISPLAY]PROGRAM_PREFIX и прописываем путь к ней там же: Проверяем: Кстати,загружаемый по умолчанию EMC файл можно изменить в ini [DISPLAY]
если прописать так
не загр. ничего.(как на скриншоте выше.)
Напишем тело нашей подпрограммы.
Его надо начинать с набора инструкций, которые определяют параметры : Смотрим: Каждая строка появилась во вкладке с возможностью редактировать данные.
Теперь мы в нашей подпрограмме (в g-коде) можем (и будем) использовать переменные.
Например,вмето T1M6 пишем T#<RToolNumber> M6
После набора инструкций (их может быть до 30) непосредственно сам G-код: Сам файл: Запускаем,на вкладке нажимаем "Create feature" ,потом "Finalize"
Получаем запрограммированную траекторию: Описание
Примеры
Как объеденить несколько подпрограмм
В программу могут быть объеденены несколько копий как одной подпрограммы, так и разные подпрограммы.
Как это выглядит на практике:
у нас есть 6 вкладок с подпрограммами для фрезерной обработки: Объеденим их все в одну программу. Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
Этим мы передали наши параметры в создаваемый ngcgui файл auto.ngc. Изменим некоторые параметры(например координаты начала обработки) Нажмем еще раз "CreateFeature".В файл auto.ngc передались также и новые параметры.Нажимаем "Finalize"-загружаем готовый файл с двумя подпрограммами: Чтобы объеденить подпрограммы с разных вкладок :
1.Открываем первую вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
2.Переходим на нужную вкладку,корректируем ,если нужно параметры,нажимаем "CreateFeature".
3.Повторяем,если необходимо.
4.Нажимаем "Finalize".
5. Соглашаемся создать из всех вкладок. Удобней объеденять несколько одинаковых контуров так:
1.создаем из требуемой вкладки копию нажатием кнопки "new"
2.нажимаем "Subfile" ,открываем файл(в нашем случае тот же,что и на первой вкладке)
3.повторяем необходимое число раз
4.корректируем параметры для каждой копии
5.объеденяем все,соблюдая нужную нам последовательность обработки. 5. Соглашаемся создать из всех вкладок. Файлы подпрoграмм
для токарной обработки шаблон цикла
сфера
конус по его длине
обработка наружной цилиндрической поверхности
расточка для фрезерной обработки цилиндрический карман
Последний раз редактировалось nkp 20 июл 2012, 06:57, всего редактировалось 45 раз.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: ngcgui
файл из стандартной сборкиNick писал(а):spiral.ngc у тебя не правильный
-----------------------
Упс,ошибочка -заменил
-
- Кандидат
- Сообщения: 83
- Зарегистрирован: 30 июн 2011, 00:02
- Репутация: 7
- Откуда: Москва
- Контактная информация:
Re: ngcgui
Имейте в виду, что эти циклы надо тщательно проверять. Я вот давеча налетел. Привинтил наконец вкладки ngcgui, поправил код (надо было простенький фланец расточить), запустил, стою и умиляюсь . Но в конце расточки резец отходит, шпиндель останавливается, сож выключается, и вдруг суппорт весело едет в патрон . Поймать я естественно ничего не смог, хорошо он хоть разогнаться до полной скорости не успел. Бум! Станок встает по сервоошибке, я в шоке. Оказалось, что я проглядел в конце цикла диверсантскую строчку - G53 G0 X0 Z0 (ну нафига такое лепить было?) . На отрисовке она не отображается, но она есть .
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: ngcgui
эта тема была открыта дабы сообща разобраться что за "зверь" такой -ngcgui .
Код выкладывался именно как пример составления подпрограмм.
Мое упущение (признаю) - надо было однозначно их (примеры) определить именно как примеры,а не как непосредственно 100% готовые к "употреблению" программы
Код выкладывался именно как пример составления подпрограмм.
Мое упущение (признаю) - надо было однозначно их (примеры) определить именно как примеры,а не как непосредственно 100% готовые к "употреблению" программы
-
- Кандидат
- Сообщения: 83
- Зарегистрирован: 30 июн 2011, 00:02
- Репутация: 7
- Откуда: Москва
- Контактная информация:
Re: ngcgui
Нене, я без претензий ,ни в коем случае. Просто призыв к внимательности . Коды я вообще откуда-то с linuxcnc качал.nkp писал(а):эта тема была открыта дабы сообща разобраться что за "зверь" такой -ngcgui .
Код выкладывался именно как пример составления подпрограмм.
Мое упущение (признаю) - надо было однозначно их (примеры) определить именно как примеры,а не как непосредственно 100% готовые к "употреблению" программы
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ngcgui
Может у тебя стоит опция не показывать холостой пробег?freeform писал(а):G53 G0 X0 Z0 (ну нафига такое лепить было?) . На отрисовке она не отображается, но она есть .
Обычно все G0 тоже отображаются...
-
- Кандидат
- Сообщения: 83
- Зарегистрирован: 30 июн 2011, 00:02
- Репутация: 7
- Откуда: Москва
- Контактная информация:
Re: ngcgui
Отобразились все G0 кроме последнего, видимо из-за смены системы координат.Nick писал(а):Обычно все G0 тоже отображаются...
В общем, явно вредительская строчка .
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: ngcgui
вопрос по tcl:
может кто знает tcl и поможет . Задача такая :
есть в окне кнопка (или несколько кнопок)
при нажатии в этом же окне открывается граф файл (jpg, png)
каждой кнопке соответствующий файл
может кто знает tcl и поможет . Задача такая :
есть в окне кнопка (или несколько кнопок)
при нажатии в этом же окне открывается граф файл (jpg, png)
каждой кнопке соответствующий файл
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: ngcgui
Идея такая:
структурировать мастера по вкладкам
на вкладке кнопки с картинками "в тему" мастера
каждая кнопка через соответствующий М-файл открывает нужное окно ngcgui
и вот тут и хотелось бы кнопочками открывать на форме разные рисунки (чертежи,схемы) у меня пока работает только первая кнопочка img1
структурировать мастера по вкладкам
на вкладке кнопки с картинками "в тему" мастера
каждая кнопка через соответствующий М-файл открывает нужное окно ngcgui
и вот тут и хотелось бы кнопочками открывать на форме разные рисунки (чертежи,схемы) у меня пока работает только первая кнопочка img1
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: ngcgui
А как эти картинки далее используются? Ну например, что будет, если изображение подменить "без ведома программы"? (Всю прогу лень изучать )
Если это чисто декоративная картинка, то задуманное можно осуществить: в проге картинка "загружается" при старте программы и прописывается в глобальных переменных (вот это и настораживает), поэтому нужно либо при старте сразу загружать все картинки с соотв. добавлением/изменением переменных, либо можно грузить непосредственно при нажатии на кнопки. Если это декорация, то возможны оба варианта, иначе только первый.
P.S. В принципе сами картинки можно поместить в текст программы в base64, чтоб они в виде отдельных файлов не валялись.
Если это чисто декоративная картинка, то задуманное можно осуществить: в проге картинка "загружается" при старте программы и прописывается в глобальных переменных (вот это и настораживает), поэтому нужно либо при старте сразу загружать все картинки с соотв. добавлением/изменением переменных, либо можно грузить непосредственно при нажатии на кнопки. Если это декорация, то возможны оба варианта, иначе только первый.
P.S. В принципе сами картинки можно поместить в текст программы в base64, чтоб они в виде отдельных файлов не валялись.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: ngcgui
Да-это просто декорация.Файлы png,jpg,gif.UAVpilot писал(а):А как эти картинки далее используются
этого как раз и добиваемсяUAVpilot писал(а):либо можно грузить непосредственно при нажатии на кнопки
сегодня малость поковырял код
вот в этой процедуре:
Код: Выделить всё
proc ::ngcgui::new_image {hdl ngcfilename } {
set idx [string first .ngc $ngcfilename]
if {$idx < 0} {return -code error "new_image <$ngcfilename>"}
set filestart [string range $ngcfilename 0 4]
foreach suffix {png gif jpg pgm} {
set f $filestart$suffix
if [file readable $f] {
set ifilename $f
break
}
}
if ![info exists ifilename] {
catch {unset ::ngc($hdl,img,filename)}
catch {pack forget $::ngc($hdl,img,widget)} ;# standalone
catch {wm withdraw $::ngc($hdl,img,top)} ;# needed for standalone
return ;# silently continue
}
set doimage 0
if ![info exists ::ngc($hdl,img,filename)] {
set ::ngc($hdl,img,status) first
set doimage 1
} else {
if {"$::ngc($hdl,img,filename)" != "$ifilename"} {
set ::ngc($hdl,img,position) [position $::ngc($hdl,img,top)]
set ::ngc($hdl,img,status) new
set doimage 1
}
}
if {$doimage} {
# first time for this file for this hdl
set ::ngc($hdl,img,filename) $ifilename
pack forget $::ngc($hdl,img,widget)
set ifilename $ni
puts $ifilename
set tmpimage [image create photo -file $ifilename]
set ct 0
set sw [expr [image width $tmpimage] / $::ngc(any,img,width,max) + 1]
set sh [expr [image height $tmpimage] / $::ngc(any,img,height,max) + 1]
set subsample $sw
if {$sh > $sw} {set subsample $sh}
set ::ngc($hdl,img,image) [image create photo]
$::ngc($hdl,img,image) copy $tmpimage -subsample $subsample -shrink
set width [image width $::ngc($hdl,img,image)]
set height [image height $::ngc($hdl,img,image)]
# convenience only:
set ::ngc($hdl,img,orig,size) [image width $tmpimage]x[image height $tmpimage]
set ::ngc($hdl,img,sampled,size) ${width}x${height}
$::ngc($hdl,img,canvas) delete all
$::ngc($hdl,img,canvas) configure -width $width -height $height
$::ngc($hdl,img,canvas) create image [expr $width/2] [expr $height/2]\
-anchor center \
-image $::ngc($hdl,img,image)
recursive_bind_controlkeys $hdl $::ngc($hdl,img,top)
pack $::ngc($hdl,img,widget)
}
Код: Выделить всё
set ifilename $ni
Код: Выделить всё
set ni nameX.png
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: ngcgui
А как изначально появляется эта картинка?
Я правильно понимаю, что там открывается некий диалог, в котором указывается некий subfile, и имя картинки берётся такое-же?
В процессе работы проги можно снова вызвать этот диалог и указать другой subfile?
Я правильно понимаю, что там открывается некий диалог, в котором указывается некий subfile, и имя картинки берётся такое-же?
В процессе работы проги можно снова вызвать этот диалог и указать другой subfile?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: ngcgui
Да,там можно из диалога вызывать любую ngc подпрограмму.
Вместе с ней по умолчанию открывается графический файл с таким же названием.
Но в авторском исполнении рисунок мал: перенес вправо на все свободное место
как бы и этого достаточно-но для удобства хотелось бы для одного мастера иметь возможность открывать несколько чертежей(схем ,рисунков,эскизов,видов)
Вместе с ней по умолчанию открывается графический файл с таким же названием.
Но в авторском исполнении рисунок мал: перенес вправо на все свободное место
как бы и этого достаточно-но для удобства хотелось бы для одного мастера иметь возможность открывать несколько чертежей(схем ,рисунков,эскизов,видов)
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: ngcgui
Собственно идея следующая: на кнопки повесить то, что запускается после выбора файла из диалога. Как-бы предопределённый выбор подпрограммы.
Сегодня уже спать пойду, а завтра, если сам не победишь, то думаю вместе сделаем. Только опиши куда надо жать, чтоб диалог позвать, ну и пара скриншотиков процесса не помешает, а то лениво прогу запускать и пробовать.
Сегодня уже спать пойду, а завтра, если сам не победишь, то думаю вместе сделаем. Только опиши куда надо жать, чтоб диалог позвать, ну и пара скриншотиков процесса не помешает, а то лениво прогу запускать и пробовать.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: ngcgui
Попробуй вот так:
предполагается, что при запуске будет сканировать каталог, заданный параметром -D и все найденные там *.ngc отобразит в виде соотв. кнопок, при нажатии которых будет грузится соотв. .ngc и картинка. Проверок на количество файлов/кнопок и на их длину не делал.
Код: Выделить всё
--- ngcgui.orig 2012-07-23 17:16:25.738953246 +0400
+++ ngcgui 2012-07-23 17:24:44.017753990 +0400
@@ -1134,36 +1134,19 @@
set w [frame $wimg.[qid]]
pack $w -fill x -expand 1
- set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
- -pady 0 -text "Img1" \
- -command [list ::ngcgui::openimg $hdl]]
- pack $b -side left -fill none -expand 0
-
- set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
- -pady 0 -text "Img2" \
- ]
- pack $b -side left -fill none -expand 0
-
- set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
- -pady 0 -text "Img3" \
- ]
- pack $b -side left -fill none -expand 0
- set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
- -pady 0 -text "Img4" \
- ]
- pack $b -side left -fill none -expand 0
- set b [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
- -pady 0 -text "Img5" \
- ]
- pack $b -side left -fill none -expand 0
+ if {![catch {glob -directory $::ngc($hdl,dir) *.ngc} files]} {
+ foreach fl $files {
+ regsub {\.ngc$} [file tail $fl] {} $nm
+ pack [button $w.[qid] -takefocus 0 -font $::ngc(any,font) \
+ -pady 0 -text $nm \
+ -command "set ::ngc($hdl,fname,subfile) $fl; ::ngcgui::gui $hdl readsubfile"] \
+ -side left -fill none -expand 0
+ }
+ }
set ::ngc($hdl,img,canvas) [canvas $wimg.canvas -bg darkgray ] ;# картинка на фрейм
- #pack $::ngc($hdl,img,canvas) -side left -expand 1 -fill both
+ pack $::ngc($hdl,img,canvas) -side left -expand 1 -fill both
-proc ::ngcgui::openimg {hdl} {
-pack $::ngc($hdl,img,canvas) -side left -expand 1 -fill both
-}
-
#---------------------------------------------------------------------------------------------
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: ngcgui
Эх...
Мысль свою я не донес до конца!
Чтоб совсем коротко - задача -
при одной открытой подпрограмме иметь возможность кнопками открывать разные картинки
Мысль свою я не донес до конца!
Чтоб совсем коротко - задача -
при одной открытой подпрограмме иметь возможность кнопками открывать разные картинки
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: ngcgui
Тогда затраты на переделки превысят затраты на написание заново. Там придётся переделывать организацию всех переменных и виджетов.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: ngcgui
я списался с Dewey Garrett (автор программы).UAVpilot писал(а):затраты на переделки превысят затраты на написание заново
он ответил
Код: Выделить всё
but it is a fair amount of work
probably need to modify this procedure:
proc ::ngcgui::new_image {hdl ngcfilename}
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: ngcgui
Это была моя первая мысль, потом я копнул глубже...
По идее там надо делать не кнопки а табы, причем не только на картинку, но и на все параметры, относящиеся к ней. Начинать с того, что все переменные вида ::ngc($hdl,....) переделывать в ::ngc($hdl,$sub,...), где $sub - идентификатор каждой страницы/подпрограммы.
По идее там надо делать не кнопки а табы, причем не только на картинку, но и на все параметры, относящиеся к ней. Начинать с того, что все переменные вида ::ngc($hdl,....) переделывать в ::ngc($hdl,$sub,...), где $sub - идентификатор каждой страницы/подпрограммы.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ngcgui
О чем говорят все эти люди
А нельзя оттуда хендлер на кнопку или на вкладку таба и запаковать туда картинку. Кстати да, табы там более логичны .
А нельзя оттуда хендлер на кнопку или на вкладку таба и запаковать туда картинку. Кстати да, табы там более логичны .