LINUX.ORG.RU

Combo-box и v-scale в CL-GTK2+


0

1

Здравствуйте. Хочу узнать как добавить на форму Combo-box. Ну вообще создать и повесть я умею я не умею наполнять. То есть у меня появляется этот список но он пустой и неактивный. Как его наполнить не знаю((( вот так создаю (как вешаю не пишу так как просто добавляю контейнер):

(Модель-типа (make-instance 'array-list-store))

(Модель-толщины (make-instance 'array-list-store))

(Модель-цвета (make-instance 'array-list-store))

(Модель-прозрачности (make-instance 'array-list-store))

(Список-типа-линий (make-instance 'combo-box :model Модель-типа))

(Список-толщины-линий (make-instance 'combo-box :model Модель-толщины))

(Список-цвета-линий (make-instance 'combo-box :model Модель-цвета))

(Список-прозрачности-линий (make-instance 'combo-box :model Модель-прозрачности))

(Список-паспорта (make-instance 'combo-box-entry))

(store-add-column Модель-типа «gchararray» #'line-width-title)

(store-add-column Модель-типа «gchararray» #'line-width-width)

(store-add-column Модель-толщины «gchararray» #'line-width-title)

(store-add-column Модель-толщины «gchararray» #'line-width-width)

(store-add-column Модель-цвета «gchararray» #'line-type-title)

(store-add-column Модель-цвета «gchararray» #'line-type-type)

(store-add-column Модель-прозрачности «gchararray» #'line-type-title)

(store-add-column Модель-прозрачности «gchararray» #'line-type-type)

Вот в последних строках ошибка. Это вырезанный кусок кода, всё это обёрнуто в Let*. и насчёт V-scale

(Список-выбора-толщины-линий (make-instance 'v-scale :min 0 :max 20 :step 1))

Создается ползунок вверху пишется «0,0», и всё он не активен сколько не щёлкай на него значение не меняется. В мануале что то не нашел ничего про это дело, в оригинальном мануале GTK2+ всё совсем по другому прописано и синтаксис чуждый. Прошу тыкнуть в хорошую статью, или объяснить хотя бы на примере но подробно.

OMG, это код лиспа?

судя по знакомым буквам, ты сделал комбобокс с моделью (GtkListStore). Собственно теперь, чтобы появились данные в выпадающем списке тебе нужно этот Store заполнить оными.

Deleted ()

Дружно кастуем dmitry_vk в тред.

mv ★★★★★ ()

Конечно, если бы вы привели конкретный рабочий кусок кода, было бы проще.

Насчет v-scale. В конструктор для v-scale вы передаете :min, :max, :step (видимо, по аналогии с функцией gtk_vscale_new_with_range). В конструктор v-scale следует передавать :adjustment, у которого в конструкторе есть параметры :lower, :upper, :step-increment.

Вот рабочий пример: https://gist.github.com/701470

Ваш вопрос про combobox займет некоторое время у меня, так как я сразу не понял его.

dmitry_vk ★★★ ()

Про комбобокс.

1) Вы не добавили данные. Поэтому комбобокс - неактивный. 2) Чтобы комбобокс отображал данные, необходимо добавить в него cell-renderer'ы.

Вот рабочий пример: https://gist.github.com/701489

dmitry_vk ★★★ ()
Ответ на: комментарий от dmitry_vk

Благодарю. Попробую разобраться. А весь код выкладывать много, хотя если не справлюсь то выложу, что бы было легче. Насчёт того что не работает из за того что данные не добавлены это я подозревал, но в том то и дело что я не понимаю как добавлять.... ну ща пример посмотрю и разберусь. Про v-scale действительно делал по аннологии потому как в мануале для Cl-GTK2+ пропущен этот виджет.

RusNekromant ()
Ответ на: комментарий от RusNekromant

Если возникают вопросы, то я советую смотреть gtk.demo.lisp в исходниках cl-gtk2, так как там использованы многие виджеты из Gtk+, и они показывают рабочие примеры их использования.

dmitry_vk ★★★ ()
Ответ на: комментарий от RusNekromant

Execution of a form compiled with errors. Form: //////Удалил так как без форматирования это просто каша была////////// Compile-time error: The LET* binding spec (STORE-ADD-COLUMN МОДЕЛЬ-ТИПА «gchararray» #'LINE-WIDTH-TITLE) is malformed. [Condition of type SB-INT:COMPILED-PROGRAM-ERROR]

Restarts: 0: [RETURN-FROM-CALLBACK] GTK::RETURN-FROM-CALLBACK 1: [TERMINATE-THREAD] Terminate this thread (#<THREAD «cl-gtk2 main thread» RUNNING {255DBD81}>)

Вот это от мне пишет когда пытаюсь замутить окошко вот тут можно код посмотреть. http://rghost.ru/3271235

RusNekromant ()
Ответ на: комментарий от dmitry_vk

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

(store-add-column Модель-типа «gchararray» #'line-width-title)

RusNekromant ()
Ответ на: комментарий от RusNekromant

Я советую сперва изучить хотя бы основы языка (например, по Practical Common Lisp), прежде чем браться за использование.

Конкретно данная проблема в том, что вы выражение (store-add-column модель-типа «gchararray» #'line-width-title) зачем-то помещаете в список привязок в let*.

Синтаксис формы let* таков:

(let* ((var-1 expr-1)
       (var-2 expr-2)
       ...
       (var-n expr-n))
  body)

В первой let* части задается список имен переменных и выражений-инициализаторов.

Код, который использует переменные, объявленные в let*, должен быть помещен в body.

dmitry_vk ★★★ ()
Ответ на: комментарий от dmitry_vk

Понял в чём ошибка, исправил постараюсь перечитать PCl(я уже 2 раза перечёл его и кучу статей, хотя они и похожи, мне наверное мешает неплохой опит на VB.6 и vb.net). Но извиняюсь за тупой вопрос наверное но почему он опять ругается?

(Модель-типа (make-instance 'array-list-store))

пишет мне ошибку вот эту

keyword argument not a symbol:
#<GTK:ARRAY-LIST-STORE {260C8E61}>.
   [Condition of type SB-INT:SIMPLE-PROGRAM-ERROR]

Restarts:
 0: [RETURN-FROM-CALLBACK] GTK::RETURN-FROM-CALLBACK

Я же GTK объявил почему такого нет? всё сделал по вашему примеру определение пакета вот

(defpackage :пакет.главный
  (:shadowing-import-from #:cairo #:scale #:rectangle #:pointer)
  (:use #:cl #:gtk #:gdk #:gobject #:cl-gtk2-cairo #:cairo)
  (:export #:main))
RusNekromant ()
Ответ на: комментарий от dmitry_vk

Дмитрий, у меня заключительный вопрос по Combo-box(да и вообще GTK) как сделать так что бы программно поменять значение в комбо-боксе ну или любом другом виджете. как вообще осуществляется обратная связь, так как сейчас только могу считывать значения а вот сделать так что бы допустим поменять значение комбо бокса с «0» на «5» программно я не могу допереть.

RusNekromant ()
Ответ на: комментарий от RusNekromant

Всё понял))) оказывается всё проще чем кажется с первого взгляда. Нужно просто (SETF (Combo-box-active Имя-списка) Числовое-значение) надеюсь кому-нибудь пригодится.

RusNekromant ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.