목차

<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

Ruby/GTK2의 시그널 함수 목록 / 시그널 목록

리턴값에 의미가 있는데

하는 의미가 있다. 윈도우는 계속 실행 되는데 이런 점이 다르군.

signal_connect

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