GTK/開発
2015年8月23日 (日) 18:59時点におけるKusakata (トーク | 投稿記録)による版 (ページの作成:「Category:ウィジェットツールキット Category:開発 en:GTK+/Development スクラッチから C で GTK+ 3 プログラムを書く時は、CFLAGS...」)
スクラッチから C で GTK+ 3 プログラムを書く時は、CFLAGS を gcc に追加してください:
$ gcc -g -Wall `pkg-config --cflags --libs gtk+-3.0` -o base base.c
-g と -Wall パラメータはデバッグ出力をするためのものなので必須ではありません。公式の Hello World サンプル も試してみてください。
目次
シンプルなメッセージダイアログアプリ
GObject-Introspection やバインディングを使うことで多くのプログラミング言語で簡単に GTK+ 3 のメッセージダイアログを作ることができます、また bash を使うこともできます。
以下の例ではシンプルに "Hello world" をメッセージダイアログに表示します。
Ada
hello_world.adb
with Gtk.Main;
with Gtk.Dialog; use Gtk.Dialog;
with Gtk.Message_Dialog; use Gtk.Message_Dialog;
procedure hello_world is
Dialog : Gtk_Message_Dialog;
Response : Gtk_Response_Type;
begin
Gtk.Main.Init;
Gtk_New (Dialog => Dialog,
Parent => null,
Flags => 0,
The_Type => Message_Info,
Buttons => Buttons_OK,
Message => "Hello world!");
Format_Secondary_Markup (Dialog, "This is an example dialog.");
Response := Run (Dialog);
end hello_world;
Bash
- 依存パッケージ: zenity
hello_world.sh
#!/bin/bash zenity --info --title='Hello world!' --text='This is an example dialog.'
Boo
- 依存パッケージ: gtk-sharp-3 (boo)
- ビルドするのに必要なパッケージ: boo
- ビルド:
booc hello_world.boo - 実行:
mono hello_world.exe(もしくはbooi hello_world.boo)
hello_world.boo
import Gtk from "gtk-sharp" Application.Init() Hello = MessageDialog(null, DialogFlags.Modal, MessageType.Info, ButtonsType.Close, "Hello world!") Hello.SecondaryText = "This is an example dialog." Hello.Run()
C
- 依存パッケージ: gtk3
- ビルド:
gcc -o hello_world `pkg-config --cflags --libs gtk+-3.0` hello_world.c
hello_world.c
#include <gtk/gtk.h>
void main (int argc, char *argv[]) {
gtk_init (&argc, &argv);
GtkWidget *hello = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Hello world!");
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (hello), "This is an example dialog.");
gtk_dialog_run(GTK_DIALOG (hello));
}
C++
- 依存パッケージ: gtkmm3
- ビルド:
g++ -o hello_world `pkg-config --cflags --libs gtkmm-3.0` hello_world.cc
hello_world.cc
#include <gtkmm/main.h>
#include <gtkmm/messagedialog.h>
int main(int argc, char *argv[]) {
Gtk::Main kit(argc, argv);
Gtk::MessageDialog Hello("Hello world!", false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK);
Hello.set_secondary_text("This is an example dialog.");
Hello.run();
}
C#
- 依存パッケージ: gtk-sharp-3
- ビルド:
mcs -pkg:gtk-sharp-3.0 hello_world.cs - 実行:
mono hello_world.exe
hello_world.cs
using Gtk;
public class HelloWorld {
static void Main() {
Application.Init ();
MessageDialog Hello = new MessageDialog (null, DialogFlags.Modal, MessageType.Info, ButtonsType.Close, "Hello world!");
Hello.SecondaryText="This is an example dialog.";
Hello.Run ();
}
}
Cobra
- 依存パッケージ: gtk-sharp-3
- ビルドするのに必要なパッケージ: AUR の cobraAUR[リンク切れ: アーカイブ: aur-mirror] from AUR
- ビルド:
cobra -c hello_world - 実行:
mono hello_world.exe
hello_world.cobra
@args -pkg:gtk-sharp-3.0
use Gtk
class HelloWorld
def main
Application.init
hello = MessageDialog(nil, DialogFlags.Modal, MessageType.Info, ButtonsType.Ok, "Hello world!")
hello.secondaryText = "This is an example dialog."
hello.run
D
- 依存パッケージ: AUR の gtkdAUR
- ビルドするのに必要なパッケージ: dmd
- ビルド:
dmd hello_world $(pkg-config --cflags --libs gtkd-2)
hello_world.d
import gtk.Main;
import gtk.MessageDialog;
void main(string[] args)
{
Main.init(args);
MessageDialog dialog = new MessageDialog(null, GtkDialogFlags.MODAL, MessageType.INFO, ButtonsType.OK, "Hello world!");
dialog.run();
}
F#
- 依存パッケージ: gtk-sharp-3
- ビルドするのに必要なパッケージ: AUR の fsharpAUR
- ビルド:
fsharpc -r:gtk-sharp.dll -I:/usr/lib/mono/gtk-sharp-3.0/ - 実行:
mono hello_world.exe
hello_world.fs
open Gtk Application.Init() let Hello = new MessageDialog(null, DialogFlags.Modal, MessageType.Info, ButtonsType.Ok, "Hello world!") Hello.SecondaryText <- "This is an example dialog." Hello.Run() |> ignore
Fortran
- 依存パッケージ: AUR の gtk-3-fortran-gitAUR[リンク切れ: アーカイブ: aur-mirror]
- ビルドするのに必要なパッケージ: gcc-fortran
- ビルド:
gfortran hello_world.f90 -o hello_world $(pkg-config --cflags --libs gtk-3-fortran)
hello_world.f90
program hello_world use gtk_hl use gtk, only: gtk_init integer(c_int) :: resp character(40), dimension(2) :: msg call gtk_init() msg(1) ="Hello world!" msg(2) = "This is an example dialog." resp = hl_gtk_message_dialog_show(msg, GTK_BUTTONS_OK, type=GTK_MESSAGE_INFO) end program hello_world
Genie
hello_world.gs
uses
Gtk
init
Gtk.init (ref args)
var Hello=new MessageDialog (null, Gtk.DialogFlags.MODAL, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Hello world!")
Hello.format_secondary_text ("This is an example dialog.")
Hello.run ()
Go
- 依存パッケージ: gtk3
- ビルドするのに必要なパッケージ: AUR の gotk3-gitAUR[リンク切れ: アーカイブ: aur-mirror]
- ビルド:
go build hello_world.go - (もしくは実行:
go run hello_world.go)
hello_world.go
package main
import ("github.com/conformal/gotk3/gtk")
func main() {
gtk.Init(nil)
dialog := gtk.MessageDialogNew(nil, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, "Hello world!")
dialog.FormatSecondaryText("This is an example notification.")
dialog.Run()
}
Groovy
- 依存パッケージ: AUR の groovy, java-gnomeAUR
- ビルド:
groovyc -cp /usr/share/java/gtk.jar HelloWorld.groovy && jar cfe HelloWorld.jar HelloWorld HelloWorld.class - 実行:
java -cp /usr/share/groovy/embeddable/groovy-all.jar:/usr/share/java/gtk.jar:HelloWorld.jar HelloWorld(orgroovy -cp /usr/share/java/gtk.jar HelloWorld.groovy)
HelloWorld.groovy
import org.gnome.gtk.* Gtk.init() def Hello = new InfoMessageDialog(null, "Hello world!", "This is an example dialog.") Hello.run()
Haskell
- 依存パッケージ: gtk3
- ビルドするのに必要なパッケージ: AUR の haskell-gtk3AUR[リンク切れ: アーカイブ: aur-mirror]
- ビルド:
ghc hello_world
hello_world.hs
import Graphics.UI.Gtk main = do initGUI dialog <- messageDialogNew Nothing [DialogModal] MessageInfo ButtonsOk "Hello world!" messageDialogSetSecondaryText dialog "This is an example dialog." _res <- dialogRun dialog return 0
Java
- 依存パッケージ: AUR の java-gnomeAUR
- ビルドするのに必要なパッケージ: java-environment
- ビルド:
mkdir HelloWorld && javac -classpath /usr/share/java/gtk.jar -d HelloWorld HelloWorld.java - 実行:
java -classpath /usr/share/java/gtk.jar:HelloWorld HelloWorld
HelloWorld.java
import org.gnome.gtk.Gtk;
import org.gnome.gtk.Dialog;
import org.gnome.gtk.InfoMessageDialog;
public class HelloWorld
{
public static void main(String[] args) {
Gtk.init(args);
Dialog Hello = new InfoMessageDialog(null, "Hello world!", "This is an example dialog.");
Hello.run();
}
}
JavaScript
hello_world.js
#!/usr/bin/gjs
Gtk = imports.gi.Gtk
Gtk.init(null, null)
Hello = new Gtk.MessageDialog({type: Gtk.MessageType.INFO,
buttons: Gtk.ButtonsType.OK,
text: "Hello world!",
"secondary-text": "This is an example dialog."})
Hello.run()
Lua
hello_world.lua
#!/usr/bin/env lua
lgi = require 'lgi'
Gtk = lgi.require('Gtk')
Gtk.init()
Hello=Gtk.MessageDialog {message_type = Gtk.MessageType.INFO,
buttons = Gtk.ButtonsType.OK,
text = "Hello world!",
secondary_text = "This is an example dialog."}
Hello:run()
Pascal
- 依存パッケージ: gtk3
- ビルドするのに必要なパッケージ: fpc, Gtk+3.0 bindings
- ビルド:
fpc hello_world
hello_world.pas
program hello_world; uses Math, Gtk3; var dialog: PGtkWidget; begin SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]); gtk_init(@argc, @argv); dialog := gtk_message_dialog_new(nil, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, '%s', ['Hello world!']); gtk_message_dialog_format_secondary_text(PGtkMessageDialog(dialog), '%s', ['This is an example dialog.']); gtk_dialog_run(PGtkDialog(dialog)); end.
Perl
- 依存パッケージ: AUR の perl-gtk3AUR
hello_world.pl
#!/usr/bin/perl
use Gtk3 -init;
my $hello = Gtk3::MessageDialog->new (undef, 'modal', 'info', 'ok', "Hello world!");
$hello->set ('secondary-text' => 'This is an example dialog.');
$hello->run;
Python
- 依存パッケージ: gtk3, python-gobject
hello_world.py
#!/usr/bin/python
from gi.repository import Gtk
Gtk.init(None)
Hello=Gtk.MessageDialog(None, Gtk.DialogFlags.MODAL, Gtk.MessageType.INFO, Gtk.ButtonsType.CLOSE, "Hello world!")
Hello.format_secondary_text("This is an example dialog.")
Hello.run()
Ruby
- 依存パッケージ: ruby-gtk3AUR[リンク切れ: アーカイブ: aur-mirror]
hello_world.rb
#!/usr/bin/env ruby
require 'gtk3'
Gtk.init
Hello = Gtk::MessageDialog.new(:type => :info,
:buttons_type => :ok,
:message => "Hello world!")
Hello.secondary_text = "This is an example dialog."
Hello.run
Scala
- 依存パッケージ: AUR の java-gnomeAUR (scala)
- ビルドするのに必要なパッケージ: scala
- ビルド:
scalac -cp /usr/share/java/gtk.jar -d HelloWorld.jar HelloWorld.scala - 実行:
java -cp /usr/share/java/gtk.jar:HelloWorld.jar HelloWorld(orscala -cp /usr/share/java/gtk.jar HelloWorld.scala)
HelloWorld.scala
import org.gnome.gtk._
object HelloWorld {
def main(args: Array[String]) {
Gtk.init(args)
var hello = new InfoMessageDialog(null, "Hello world!", "This is an example dialog.")
hello.run()
}
}
Vala
hello_world.vala
using Gtk;
public class HelloWorld {
static void main (string[] args) {
Gtk.init (ref args);
var Hello=new MessageDialog (null, Gtk.DialogFlags.MODAL, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Hello world!");
Hello.format_secondary_text ("This is an example dialog.");
Hello.run ();
}
}
Visual Basic .NET
- 依存パッケージ: gtk-sharp-3
- ビルドするのに必要なパッケージ: mono-basic
- ビルド:
vbnc -r:/usr/lib/mono/gtk-sharp-3.0/gio-sharp.dll -r:/usr/lib/mono/gtk-sharp-3.0/glib-sharp.dll -r:/usr/lib/mono/gtk-sharp-3.0/gtk-sharp.dll hello_world.vb - 実行:
mono hello_world.exe
hello_world.vb
Imports Gtk Public Class Hello Inherits MessageDialog Public Sub New MyBase.New(Me, DialogFlags.Modal, MessageType.Info, ButtonsType.Close, "Hello world!") Me.SecondaryText = "This is an example dialog." End Sub Public Shared Sub Main Application.Init Dim Dialog As New Hello Dialog.Run End Sub End Class