LINUX.ORG.RU

GUI в racket

 , , ,


0

1

Приветствую всех! Начал ковырять GUI в Racket и сразу встрял с tabs. Вот где встрял (прошу за код сильно не ругать, я только начал учить Racket):


#lang racket/gui

(define my-settings-hash (make-hash))
(define my-settings-hash "label" "Test")
(define my-settings-hash "width" 300)
(define my-settings-hash "height" 300)

(define my-tabs-list (list "Tab 0"
                           "Tab 1"
                           "Tab 2"))


(define root-wnd (new frame% [label (hash-ref my-settibgs-hash "label")]
                             [width (hash-ref my-settings-hash "width")]
                             [height (hash-ref my-settings-hash "height"]))

(define tab-panel (new tab-panel%
                                 (parent root-wnd)
                                 (choices my-tabs-list)
                                 (callback
                                   (lambda (tp e)
                                    (case (send tp get-selection)
                                     ((0) (send tp change-children (lambda (children) (list a-panel))))
                                     ((1) (send tp change-children (lambda (children) (list b-panel))))
                                     ((2) (send tp change-children (lambda (children) (list a-panel)))))))))

(define a-panel (new panel%
                 (parent tab-panel)
                 (label "A-panel")))
(define b-panel (new panel%
                 (parent tab-panel)
                 (label "b-panel")))

(send frame show #t)
(сорри, если есть лишние скобки). Проблема вот в чем - когда программа запускается в главном окне обе панели, а только после переключения одна пропадает и остается одна. Где я затупил? Буду благодарен, если внесете правку или дадите рабочий пример (только, пожалуйста, с решением «в лоб», т.к. пока очень плохо знаю racket и могу не понять более или менее сложного способа). Заранее благодарю!



Последнее исправление: RacketEvangelist (всего исправлений: 3)
Ответ на: комментарий от baverman

я делал через

(send a-tab show #f)
Тогда вообще жесть творится. b-panel - остается снижу. Или hide скрывает панель «физически»? (простите, не имею возможности проверить решение)

RacketEvangelist
() автор топика

Мне Racket 5.3 выдал кучу ошибок на этот код (кроме опечаток).

А вот так все работает:

(define my-settings-hash (make-hash))
(hash-set! my-settings-hash "label" "Test")
(hash-set! my-settings-hash "width" 300)
(hash-set! my-settings-hash "height" 300)

(define my-tabs-list (list "Tab 0"
                           "Tab 1"
                           "Tab 2"))


(define root-wnd (new frame% [label  (hash-ref my-settings-hash "label")]
                             [width  (hash-ref my-settings-hash "width")]
                             [height (hash-ref my-settings-hash "height")]))

(define tab-panel (new tab-panel%
                                 (parent root-wnd)
                                 (choices my-tabs-list)
                                 (callback
                                   (lambda (tp e)
                                    (case (send tp get-selection)
                                     ((0) (send tp change-children (lambda (children) (list a-panel))))
                                     ((1) (send tp change-children (lambda (children) (list b-panel))))
                                     ((2) (send tp change-children (lambda (children) (list a-panel)))))))))

(define a-panel (new panel% (parent tab-panel)))
(define a-label (new message% (parent a-panel) (label "A panel")))

(define b-panel (new panel% (parent tab-panel)))
(define b-label (new message% (parent b-panel) (label "B panel")))

(send tab-panel change-children (lambda (children) (list a-panel)))
(send root-wnd show #t)

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

Спасибо! На память код набирал, к сожалению исходники дома.

RacketEvangelist
() автор топика
Ответ на: комментарий от RacketEvangelist
(define a-panel (new panel%
                 (parent tab-panel)
                 (label "A-panel")))

потому, что у panel% нет свойства label. Смотри документацию.

qaqa ★★
()

забей. они даже GtkPaned не удосужились обернуть =/

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