跳轉到內容

GTK+ 示例/GTK+/Hello World

來自華夏公益教科書,開放的書籍,用於開放的世界

這個小型教程演示瞭如何建立一個帶有單個按鈕的簡單視窗。當按鈕被點選時,按鈕上的標籤內容將被列印到標準輸出。

標籤被包裝到按鈕中,按鈕又被包裝到視窗中。

首先,您必須包含 gtk 標頭檔案。

 #include<gtk/gtk.h>

接下來,定義了兩個**回撥函式**原型,一個用於關閉視窗,另一個用於點選按鈕。回撥函式基本上是呼叫由低階程式碼(在本例中是 GTK 本身)透過傳遞函式地址呼叫的函式。

 static gint delete_callback(GtkWidget* w, GdkEventAny* e, gpointer data);
 static void button_callback(GtkWidget* w ,gpointer data);

完整原始碼

[編輯 | 編輯原始碼]
 #include<gtk/gtk.h>
 
 static gint delete_callback(GtkWidget* w, GdkEventAny* e, gpointer data);
 static void button_callback(GtkWidget* w ,gpointer data); 
 
 int main(int argc, char* argv[])
 {
   GtkWidget* window;
   GtkWidget* button;
   GtkWidget* label;
   
   gtk_init(&argc, &argv);
   
   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   button = gtk_button_new();
   label = gtk_label_new("Hello World");
   
   gtk_container_add(GTK_CONTAINER(button),label);
   gtk_container_add(GTK_CONTAINER(window), button);
   
   gtk_window_set_title(GTK_WINDOW(window), " Hello World");
   gtk_container_set_border_width(GTK_CONTAINER(button),10);
   gtk_window_set_default_size(GTK_WINDOW(window),400,400);         
   
   gtk_signal_connect(GTK_OBJECT(window),
 		     "delete_event",
 		     GTK_SIGNAL_FUNC(delete_callback),
 		     NULL);
   
   gtk_signal_connect(GTK_OBJECT(button),
 		     "clicked",
 		     GTK_SIGNAL_FUNC(button_callback),
 		     label);
   
   gtk_widget_show_all(window);
   gtk_main();
   
   return 0;
   
 }
 
 static gint delete_callback(GtkWidget* w, GdkEventAny* e, gpointer data)
 {
   gtk_main_quit();
 }
 static void button_callback(GtkWidget* w ,gpointer data)
 {
   GtkWidget* label;
   gchar* text;
   
   label = GTK_WIDGET(data);
   gtk_label_get(GTK_LABEL(label), &text);
   
   printf("%s \n", text);
   
 }

在 Gtk2-Perl 中

[編輯 | 編輯原始碼]
#!/usr/bin/perl

use Gtk2 "-init";
use warnings;
use strict;

my $window = new Gtk2::Window;
my $button = new Gtk2::Button('Reset');
$window->add($button);

$window->set_title("Hello, world!");
$button->set_border_width(10);
$window->set_default_size(400,400);

$window->signal_connect("delete_event", \&delete_callback);
$button->signal_connect("clicked", \&button_callback);
$window->show_all;
Gtk2->main;

sub delete_callback{
    Gtk2->main_quit;
}
sub button_callback{
    my $label = $button->get_child;
    $label->set_text ("Support your local bakery");
    $window->show_all;
}

在 Gtk2Hs Haskell 中

[編輯 | 編輯原始碼]
module Main where

import Graphics.UI.Gtk

main :: IO ()
main = do
  initGUI
  window  windowNew
  button  buttonNewWithLabel "Reset"
  set window [windowTitle := "Hello",
              windowDefaultWidth := 400,
              windowDefaultHeight := 400,
              containerChild := button]
  set button [containerBorderWidth := 10]
  onClicked button $ buttonSetLabel button "Support your local pâtisserie"
  onDestroy window mainQuit
  widgetShowAll window
  mainGUI
華夏公益教科書