sdk:gtk2
<title>GTK2</title>
GTK2 Tutorial Site에서 읽어 본 것을 정리하자
필요한거 만들 정도만, 읽어볼 예정
gtk gtk2
Hello World
일단 윈도우를 띄우고 종료하는데 필요한 코드.
require 'gtk2' button = Gtk::Button.new("Hello World") button.signal_connect("clicked") { puts "Hello World" } #윈도우 생성, 간단하네. window = Gtk::Window.new window.signal_connect("delete_event") { puts "delete event occurred" false } window.signal_connect("destroy") { puts "destroy event occurred" Gtk.main_quit } window.border_width = 20 window.add(button) # 윈도우를 보여준다, 끝. window.show_all # 이벤트 사이클 시작 (아마도) Gtk.main
Signal
- 나중에 정리해볼까나?
리턴값에 의미가 있는데
- true : 이벤트 실행을 이 함수에서 종료
- false : 이벤트 실행을 계속 진행
하는 의미가 있다. 윈도우는 계속 실행 되는데 이런 점이 다르군.
signal_connect
- connect_signal()은 같은 시그널에 여러 개의 함수를 연결 할 수 있더라. 실행하면 연결된 순서대로 실행 된다.
signal_emit
- 파라미터로 입력된 시그널, 스트링형식의 이름,과 연결된 함수를 모두 호출한다.
signal_handler_disconnect
- 연결된 시그널을 모두 삭제한다.
BasicWindow
구지 클래스로 만들 필요는 없었지만, 코딩 연습하고 문법 익히는 김에 간단히 종료 버튼을 추가한 기능만을 작성
require 'gtk2' class BasicWindow < Gtk::Window def initialize(title = nil) # dont forget call super.initialize super(Gtk::Window::TOPLEVEL) signal_connect('delete_event') do Gtk.main_quit false end border_width=10 end end mainWindow = BasicWindow.new mainWindow.show_all Gtk.main
위젯(widget)
위젯은 new로 생성하고, 위젯의 옵션은 new의 파라미터로 입력한다. –> 도움말을 참고
UI 작성
MSVC는 UI 편집기가 있어서 매우 간단하게 끝낼 수 있는데, 이건 머리 속으로 상상하면서 위젯을 하나씩 붙여가야했다. 앞으로도 계속 그래야 하는지 잘 모르겠는데… UI 편집툴이 있긴하던데, 좀 불편하다.
간단한걸 만들고 싶으면 그냥 코딩하는게 나을지도 모르겠다.
UI 작성시에는,
Gtk::HBox나 Gtk::VBox로 먼저 위젯을 붙일 공간을 준비하고 이 박스에는
hbox.pack_start( widgetName, true, true, spacing )
이 함수로 위젯을 더 붙여간다. 위젯을 더 모양 좋게 붙이려면 다른 위젯을 더 붙여가야하는데 아직은 뭘 붙여야 하는지 모르겠다.
다음 코드를 찬찬히 읽어보는게 더 빠르다.
# +------------------------+ # | mainVbox | # |+-editFrame------------+| # || entry || # |+----------------------|| # |+-btnFrame-------------+| # || btnBox + button || # |+----------------------|| # +------------------------+ def prepareUISample # 순서 # 1. 버티컬 박스를 생성하고 메인 윈도우에 추가 # 2. 에디트프레임(그룹핑박스) 생성하고, 버티컬박스에 추가 # 3. 엔트리(입력창)를 생성하고 에디트프레임에 추가 mainVbox = Gtk::VBox.new( false, 2 ) # 메인 윈도우에 추가하는 부분 (그렇다고 상상하면 됨) add( mainVbox ) # 프레임을 생성하고 버티컬박스에 추가 editFrame = Gtk::Frame.new('enter sample value') mainVbox.pack_start( editFrame, true, true, 10 ) # 엔트리(입력창)을 생성해서 에디트 프레임에 추가 entry1 = Gtk::Entry.new editFrame.add( entry1 ) # 이쪽의 순서 # 1. 버튼프레임생성(그룹핑박스)하고 버티컬박스에 추가, 위에서 생성한거 아래 부분에 추가됨 # 2. 버튼박스를 생성해서 버튼 프레임에 추가 btnFrame = Gtk::Frame.new('some choice') mainVbox.pack_start(btnFrame, true, true, 5) btnBox = Gtk::HButtonBox.new btnBox.set_border_width(5) btnBox.layout_style = Gtk::ButtonBox::EDGE btnBox.set_spacing(40) btnFrame.add( btnBox ) end
Gtk::Box
Gtk::Box#pack_start
- 위젯을 위 –> 아래 / 왼쪽 –> 오른쪽으로 붙여간다.
Gtk::Box#pack_end
- 위젯을 아래 –> 위 / 오른쪽 –> 왼쪽으로 붙여간다.
Gtk 대화상자(dialog) 띄우기
dialog = Gtk::MessageDialog.new(self, Gtk::Dialog::MODAL | Gtk::Dialog::DESTROY_WITH_PARENT, Gtk::MessageDialog::INFO, Gtk::MessageDialog::BUTTONS_OK, @tempText ) dialog.run dialog.destroy
sdk/gtk2.txt · 마지막으로 수정됨: 2024/04/23 22:43 저자 127.0.0.1