sdk:gtk2
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판 | |||
| sdk:gtk2 [2021/04/24 17:01] – kieuns | sdk:gtk2 [2024/04/23 22:43] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| + | < | ||
| + | [[http:// | ||
| + | |||
| + | 필요한거 만들 정도만, 읽어볼 예정 | ||
| + | |||
| + | {{tag> gtk gtk2}} | ||
| + | |||
| + | ====== Hello World ====== | ||
| + | |||
| + | 일단 윈도우를 띄우고 종료하는데 필요한 코드. | ||
| + | |||
| + | <code ruby> | ||
| + | require ' | ||
| + | |||
| + | button = Gtk:: | ||
| + | button.signal_connect(" | ||
| + | puts "Hello World" | ||
| + | } | ||
| + | |||
| + | #윈도우 생성, 간단하네. | ||
| + | window = Gtk:: | ||
| + | window.signal_connect(" | ||
| + | puts " | ||
| + | false | ||
| + | } | ||
| + | |||
| + | window.signal_connect(" | ||
| + | puts " | ||
| + | Gtk.main_quit | ||
| + | } | ||
| + | |||
| + | window.border_width = 20 | ||
| + | window.add(button) | ||
| + | # 윈도우를 보여준다, | ||
| + | window.show_all | ||
| + | # 이벤트 사이클 시작 (아마도) | ||
| + | Gtk.main | ||
| + | </ | ||
| + | |||
| + | ====== Signal ====== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | * 나중에 정리해볼까나? | ||
| + | |||
| + | 리턴값에 의미가 있는데 | ||
| + | * true : 이벤트 실행을 이 함수에서 종료 | ||
| + | * false : 이벤트 실행을 계속 진행 | ||
| + | 하는 의미가 있다. 윈도우는 계속 실행 되는데 이런 점이 다르군. | ||
| + | |||
| + | signal_connect | ||
| + | * connect_signal()은 같은 시그널에 여러 개의 함수를 연결 할 수 있더라. 실행하면 연결된 순서대로 실행 된다. | ||
| + | |||
| + | signal_emit | ||
| + | * 파라미터로 입력된 시그널, 스트링형식의 이름,과 연결된 함수를 모두 호출한다. | ||
| + | |||
| + | signal_handler_disconnect | ||
| + | * 연결된 시그널을 모두 삭제한다. | ||
| + | |||
| + | ====== BasicWindow ====== | ||
| + | |||
| + | 구지 클래스로 만들 필요는 없었지만, | ||
| + | |||
| + | <code ruby> | ||
| + | require ' | ||
| + | |||
| + | class BasicWindow < Gtk::Window | ||
| + | def initialize(title = nil) | ||
| + | # dont forget call super.initialize | ||
| + | super(Gtk:: | ||
| + | signal_connect(' | ||
| + | Gtk.main_quit | ||
| + | false | ||
| + | end | ||
| + | border_width=10 | ||
| + | end | ||
| + | end | ||
| + | |||
| + | mainWindow = BasicWindow.new | ||
| + | mainWindow.show_all | ||
| + | Gtk.main | ||
| + | </ | ||
| + | |||
| + | ====== 위젯(widget) ====== | ||
| + | |||
| + | 위젯은 new로 생성하고, | ||
| + | |||
| + | |||
| + | ===== UI 작성 ===== | ||
| + | |||
| + | MSVC는 UI 편집기가 있어서 매우 간단하게 끝낼 수 있는데, 이건 머리 속으로 상상하면서 위젯을 하나씩 붙여가야했다. 앞으로도 계속 그래야 하는지 잘 모르겠는데... UI 편집툴이 있긴하던데, | ||
| + | |||
| + | 간단한걸 만들고 싶으면 그냥 코딩하는게 나을지도 모르겠다. | ||
| + | |||
| + | UI 작성시에는, | ||
| + | |||
| + | Gtk:: | ||
| + | <code ruby> | ||
| + | hbox.pack_start( widgetName, true, true, spacing ) | ||
| + | </ | ||
| + | 이 함수로 위젯을 더 붙여간다. **위젯을 더 모양 좋게 붙이려면 다른 위젯을 더 붙여가야하는데** 아직은 뭘 붙여야 하는지 모르겠다. | ||
| + | |||
| + | 다음 코드를 찬찬히 읽어보는게 더 빠르다. | ||
| + | |||
| + | <code ruby> | ||
| + | # +------------------------+ | ||
| + | # | mainVbox | ||
| + | # |+-editFrame------------+| | ||
| + | # || entry || | ||
| + | # |+----------------------|| | ||
| + | # |+-btnFrame-------------+| | ||
| + | # || btnBox + button | ||
| + | # |+----------------------|| | ||
| + | # +------------------------+ | ||
| + | def prepareUISample | ||
| + | # 순서 | ||
| + | # 1. 버티컬 박스를 생성하고 메인 윈도우에 추가 | ||
| + | # 2. 에디트프레임(그룹핑박스) 생성하고, | ||
| + | # 3. 엔트리(입력창)를 생성하고 에디트프레임에 추가 | ||
| + | mainVbox = Gtk:: | ||
| + | # 메인 윈도우에 추가하는 부분 (그렇다고 상상하면 됨) | ||
| + | add( mainVbox ) | ||
| + | # 프레임을 생성하고 버티컬박스에 추가 | ||
| + | editFrame = Gtk:: | ||
| + | mainVbox.pack_start( editFrame, true, true, 10 ) | ||
| + | # 엔트리(입력창)을 생성해서 에디트 프레임에 추가 | ||
| + | entry1 = Gtk:: | ||
| + | editFrame.add( entry1 ) | ||
| + | |||
| + | # 이쪽의 순서 | ||
| + | # 1. 버튼프레임생성(그룹핑박스)하고 버티컬박스에 추가, 위에서 생성한거 아래 부분에 추가됨 | ||
| + | # 2. 버튼박스를 생성해서 버튼 프레임에 추가 | ||
| + | btnFrame = Gtk:: | ||
| + | mainVbox.pack_start(btnFrame, | ||
| + | btnBox = Gtk:: | ||
| + | btnBox.set_border_width(5) | ||
| + | btnBox.layout_style = Gtk:: | ||
| + | btnBox.set_spacing(40) | ||
| + | btnFrame.add( btnBox ) | ||
| + | end | ||
| + | </ | ||
| + | |||
| + | ===== Gtk::Box ===== | ||
| + | |||
| + | Gtk:: | ||
| + | |||
| + | * 위젯을 위 --> 아래 / 왼쪽 --> 오른쪽으로 붙여간다. | ||
| + | |||
| + | Gtk:: | ||
| + | |||
| + | * 위젯을 아래 --> 위 / 오른쪽 --> 왼쪽으로 붙여간다. | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | ===== Gtk 대화상자(dialog) 띄우기 ===== | ||
| + | |||
| + | <code ruby> | ||
| + | dialog = Gtk:: | ||
| + | Gtk:: | ||
| + | Gtk:: | ||
| + | Gtk:: | ||
| + | @tempText ) | ||
| + | dialog.run | ||
| + | dialog.destroy | ||
| + | </ | ||