CommonLisp 및 GTK+3을 사용한 GUI 애플리케이션에서 위젯 배치 메모
10852 단어 GTK3common-lispgtk
소개
CommonLisp 및 GTK+3에서 웹 애플리케이션을 작성할 때 위젯 배치에 관한 메모입니다.
이번에는 테이블을 사용한 배치 방법에 대해 설명합니다.
테이블을 사용한 위젯 배치
아래 코드로 위젯을 배치할 수 있는 6×5 그리드를 작성할 수 있습니다.
(table (make-instance 'gtk-table :n-rows 6 :n-columns 5))
위젯은 다음 코드로 배치합니다.
(gtk-table-attach table "ウィジェット名" "左端" "右端" "上端" "下端")
배치할 때 아래와 같은 그림을 코멘트로 써 두면 알기 쉬울지도.
Row
0 1 2 3 4 5 6
0 +---+---+---+---+---+---+
| | | | | | |
1 +---+---+---+---+---+---+
| | | | | | |
C 2 +---+---+---+---+---+---+
o | | | | | | |
l 3 +---+---+---+---+---+---+
| | | | | | |
4 +---+---+---+---+---+---+
| | | | | | |
5 +---+---+---+---+---+---+
샘플 소스 코드
라벨, 엔트리, 버튼을 적당히 배치한 프로그램.
gtk-table-sample.lisp(ql:quickload :cl-cffi-gtk)
(defpackage :my-gtk3-app
(:use :cl
:gtk
:gdk
:gdk-pixbuf
:gobject
:glib
:gio
:pango
:cairo))
(in-package :my-gtk3-app)
(defun main ()
(within-main-loop
(let ((window (make-instance 'gtk-window
:title "GTK+3 Practice"
:type :toplevel
:border-width 12))
(label1 (make-instance 'gtk-label :label "Label1:"))
(label2 (make-instance 'gtk-label :label "Label2:"))
(label3 (make-instance 'gtk-label :label "Label3:"))
(entry1 (make-instance 'gtk-entry))
(entry2 (make-instance 'gtk-entry))
(entry3 (make-instance 'gtk-entry))
(button1 (make-instance 'gtk-button :label "Button1"))
(label4 (make-instance 'gtk-label :label "Label4:"))
(entry4 (make-instance 'gtk-entry))
(button2 (make-instance 'gtk-button :label "Button2"))
(table (make-instance 'gtk-table :n-rows 6 :n-columns 5)))
;; Define the signal handlers
(g-signal-connect window "destroy"
(lambda (widget)
(declare (ignore widget))
(leave-gtk-main)))
;; Put the widgets into the table
;; Row
;; 0 1 2 3 4 5 6
;; 0 +---+---+---+---+---+---+
;; | | | | | | |
;; 1 +---+---+---+---+---+---+
;; | | | | | | |
;; C 2 +---+---+---+---+---+---+
;; o | | | | | | |
;; l 3 +---+---+---+---+---+---+
;; | | | | | | |
;; 4 +---+---+---+---+---+---+
;; | | | | | | |
;; 5 +---+---+---+---+---+---+
;;
;; R1 R2 C1 C2
(gtk-table-attach table label1 0 1 0 1)
(gtk-table-attach table label2 2 3 0 1)
(gtk-table-attach table label3 4 5 0 1)
(gtk-table-attach table entry1 1 2 0 1)
(gtk-table-attach table entry2 3 4 0 1)
(gtk-table-attach table entry3 5 6 0 1)
(gtk-table-attach table button1 1 6 1 2)
(gtk-table-attach table label4 0 1 3 4)
(gtk-table-attach table entry4 1 6 3 4)
(gtk-table-attach table button2 1 6 4 5)
;; Put the table into the window
(gtk-container-add window table)
;; Show the window
(gtk-widget-show-all window))))
;; Execution!
(main)
실행
다음 명령으로 실행
ros run --load gtk-table-sample.lisp
다음과 같은 화면이 표시됩니다.
마지막으로
테이블을 사용한 위젯 배치는 스스로 자유도가 높고 좋다고 생각했습니다.
그 밖에도 이런 「패킹 위젯」이라고 하는 위젯을 배치하기 위한 위젯(?)이 있으므로, 여러가지 조합할 때 예쁜 GUI를 만들 수 있을 것 같네요.
Reference
이 문제에 관하여(CommonLisp 및 GTK+3을 사용한 GUI 애플리케이션에서 위젯 배치 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/d45ced2949b396f7d356
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
아래 코드로 위젯을 배치할 수 있는 6×5 그리드를 작성할 수 있습니다.
(table (make-instance 'gtk-table :n-rows 6 :n-columns 5))
위젯은 다음 코드로 배치합니다.
(gtk-table-attach table "ウィジェット名" "左端" "右端" "上端" "下端")
배치할 때 아래와 같은 그림을 코멘트로 써 두면 알기 쉬울지도.
Row
0 1 2 3 4 5 6
0 +---+---+---+---+---+---+
| | | | | | |
1 +---+---+---+---+---+---+
| | | | | | |
C 2 +---+---+---+---+---+---+
o | | | | | | |
l 3 +---+---+---+---+---+---+
| | | | | | |
4 +---+---+---+---+---+---+
| | | | | | |
5 +---+---+---+---+---+---+
샘플 소스 코드
라벨, 엔트리, 버튼을 적당히 배치한 프로그램.
gtk-table-sample.lisp(ql:quickload :cl-cffi-gtk)
(defpackage :my-gtk3-app
(:use :cl
:gtk
:gdk
:gdk-pixbuf
:gobject
:glib
:gio
:pango
:cairo))
(in-package :my-gtk3-app)
(defun main ()
(within-main-loop
(let ((window (make-instance 'gtk-window
:title "GTK+3 Practice"
:type :toplevel
:border-width 12))
(label1 (make-instance 'gtk-label :label "Label1:"))
(label2 (make-instance 'gtk-label :label "Label2:"))
(label3 (make-instance 'gtk-label :label "Label3:"))
(entry1 (make-instance 'gtk-entry))
(entry2 (make-instance 'gtk-entry))
(entry3 (make-instance 'gtk-entry))
(button1 (make-instance 'gtk-button :label "Button1"))
(label4 (make-instance 'gtk-label :label "Label4:"))
(entry4 (make-instance 'gtk-entry))
(button2 (make-instance 'gtk-button :label "Button2"))
(table (make-instance 'gtk-table :n-rows 6 :n-columns 5)))
;; Define the signal handlers
(g-signal-connect window "destroy"
(lambda (widget)
(declare (ignore widget))
(leave-gtk-main)))
;; Put the widgets into the table
;; Row
;; 0 1 2 3 4 5 6
;; 0 +---+---+---+---+---+---+
;; | | | | | | |
;; 1 +---+---+---+---+---+---+
;; | | | | | | |
;; C 2 +---+---+---+---+---+---+
;; o | | | | | | |
;; l 3 +---+---+---+---+---+---+
;; | | | | | | |
;; 4 +---+---+---+---+---+---+
;; | | | | | | |
;; 5 +---+---+---+---+---+---+
;;
;; R1 R2 C1 C2
(gtk-table-attach table label1 0 1 0 1)
(gtk-table-attach table label2 2 3 0 1)
(gtk-table-attach table label3 4 5 0 1)
(gtk-table-attach table entry1 1 2 0 1)
(gtk-table-attach table entry2 3 4 0 1)
(gtk-table-attach table entry3 5 6 0 1)
(gtk-table-attach table button1 1 6 1 2)
(gtk-table-attach table label4 0 1 3 4)
(gtk-table-attach table entry4 1 6 3 4)
(gtk-table-attach table button2 1 6 4 5)
;; Put the table into the window
(gtk-container-add window table)
;; Show the window
(gtk-widget-show-all window))))
;; Execution!
(main)
실행
다음 명령으로 실행
ros run --load gtk-table-sample.lisp
다음과 같은 화면이 표시됩니다.
마지막으로
테이블을 사용한 위젯 배치는 스스로 자유도가 높고 좋다고 생각했습니다.
그 밖에도 이런 「패킹 위젯」이라고 하는 위젯을 배치하기 위한 위젯(?)이 있으므로, 여러가지 조합할 때 예쁜 GUI를 만들 수 있을 것 같네요.
Reference
이 문제에 관하여(CommonLisp 및 GTK+3을 사용한 GUI 애플리케이션에서 위젯 배치 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/d45ced2949b396f7d356
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(ql:quickload :cl-cffi-gtk)
(defpackage :my-gtk3-app
(:use :cl
:gtk
:gdk
:gdk-pixbuf
:gobject
:glib
:gio
:pango
:cairo))
(in-package :my-gtk3-app)
(defun main ()
(within-main-loop
(let ((window (make-instance 'gtk-window
:title "GTK+3 Practice"
:type :toplevel
:border-width 12))
(label1 (make-instance 'gtk-label :label "Label1:"))
(label2 (make-instance 'gtk-label :label "Label2:"))
(label3 (make-instance 'gtk-label :label "Label3:"))
(entry1 (make-instance 'gtk-entry))
(entry2 (make-instance 'gtk-entry))
(entry3 (make-instance 'gtk-entry))
(button1 (make-instance 'gtk-button :label "Button1"))
(label4 (make-instance 'gtk-label :label "Label4:"))
(entry4 (make-instance 'gtk-entry))
(button2 (make-instance 'gtk-button :label "Button2"))
(table (make-instance 'gtk-table :n-rows 6 :n-columns 5)))
;; Define the signal handlers
(g-signal-connect window "destroy"
(lambda (widget)
(declare (ignore widget))
(leave-gtk-main)))
;; Put the widgets into the table
;; Row
;; 0 1 2 3 4 5 6
;; 0 +---+---+---+---+---+---+
;; | | | | | | |
;; 1 +---+---+---+---+---+---+
;; | | | | | | |
;; C 2 +---+---+---+---+---+---+
;; o | | | | | | |
;; l 3 +---+---+---+---+---+---+
;; | | | | | | |
;; 4 +---+---+---+---+---+---+
;; | | | | | | |
;; 5 +---+---+---+---+---+---+
;;
;; R1 R2 C1 C2
(gtk-table-attach table label1 0 1 0 1)
(gtk-table-attach table label2 2 3 0 1)
(gtk-table-attach table label3 4 5 0 1)
(gtk-table-attach table entry1 1 2 0 1)
(gtk-table-attach table entry2 3 4 0 1)
(gtk-table-attach table entry3 5 6 0 1)
(gtk-table-attach table button1 1 6 1 2)
(gtk-table-attach table label4 0 1 3 4)
(gtk-table-attach table entry4 1 6 3 4)
(gtk-table-attach table button2 1 6 4 5)
;; Put the table into the window
(gtk-container-add window table)
;; Show the window
(gtk-widget-show-all window))))
;; Execution!
(main)
다음 명령으로 실행
ros run --load gtk-table-sample.lisp
다음과 같은 화면이 표시됩니다.
마지막으로
테이블을 사용한 위젯 배치는 스스로 자유도가 높고 좋다고 생각했습니다.
그 밖에도 이런 「패킹 위젯」이라고 하는 위젯을 배치하기 위한 위젯(?)이 있으므로, 여러가지 조합할 때 예쁜 GUI를 만들 수 있을 것 같네요.
Reference
이 문제에 관하여(CommonLisp 및 GTK+3을 사용한 GUI 애플리케이션에서 위젯 배치 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/d45ced2949b396f7d356
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(CommonLisp 및 GTK+3을 사용한 GUI 애플리케이션에서 위젯 배치 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fireflower0/items/d45ced2949b396f7d356텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)