Strumenti Utente

Strumenti Sito


programmazione:d:gtkd:hello_world

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
programmazione:d:gtkd:hello_world [03/07/2025 12:58] – creata Fabio Di Matteoprogrammazione:d:gtkd:hello_world [02/09/2025 23:03] (versione attuale) – Fabio Di Matteo
Linea 3: Linea 3:
 Autore: **//Fabio Di Matteo//** \\ Ultima revisione:  **//  03/07/2025 12:56   //**  // // Autore: **//Fabio Di Matteo//** \\ Ultima revisione:  **//  03/07/2025 12:56   //**  // //
  
-Un hello world che mostra le basi di una finestra GTK-D .+<note important>Funziona ancora , ma io userei [[programmazione:d:gid:hello_world|Hello world in gtk4 e linguaggio D usando Gid]]</note> 
 + 
 +Un hello world che mostra le basi di una finestra GTK-D . \\ 
 + 
 +Trovo la documentazione un pochino carente al momento. Mi sono aiutato guardando gli esempi dentro la directory "demos" del  
 +[[https://github.com/gtkd-developers/GtkD/tree/master|repository ufficiale GtkD]] . In più dato che ho usato dub package manager ho trovato utile dare una sbirciata direttamente al codice sorgente di GTK-D . I file si trovano qui: 
 +<file>ls $HOME/.dub/packages/gtk-d/3.11.0/gtk-d/generated/gtkd/gtk</file> 
 +Altra risorsa utile: [[https://code.dlang.org/packages/gid-gtk4-examples|gid-gtk4-examples]] 
 + 
 +===== Una semplice finestra con un bottone =====
  
 <code D> <code D>
Linea 37: Linea 46:
     Main.run();     Main.run();
 } }
 +
 +</code>
 +
 +
 +**dub.json**
 +<code json>
 +{
 + "authors": [
 + "fabio"
 + ],
 + "copyright": "Copyright © 2025, fabio",
 + "dependencies": {
 + "gtk-d": "~>3.11.0"
 + },
 + "description": "A minimal D application.",
 + "license": "GPL-2.0-only",
 + "name": "gtk3-builder"
 +}
 +</code>
 +
 +===== Uso di Gtk Builder e Glade =====
 +
 +**app.d**
 +<code D>
 +import gio.Application: GioApplication = Application;
 +
 +import gtk.Application;
 +import gtk.ApplicationWindow;
 +import gtk.Builder;
 +import gtk.Button;
 +import gtk.Entry;
 +import gtk.Label;
 +
 +import std.stdio;
 +import core.stdc.stdlib;
 +
 +
 +int main(string[] args)
 +{
 +    auto application = new Application("org.gtkd.demo.builder.builderTest", GApplicationFlags.FLAGS_NONE);
 +    
 +    void initGui(GioApplication a) 
 +    {
 +    
 + auto builder = new Builder();
 +
 + if( ! builder.addFromFile("gui.ui") ) {
 + writeln("Oops, could not create Glade object, check your glade file ;)");
 + exit(1);
 + }
 + auto mywin = cast(ApplicationWindow)builder.getObject("mywin");
 + if (mywin is null) 
 + {
 + writeln("mywin è null");
 + }
 + mywin.setApplication(application);
 + mywin.setTitle("This is a glade application window");
 +
 + auto mylabel = cast(Label)builder.getObject("mylabel");
 + auto myentry = cast(Entry)builder.getObject("myentry");
 + auto mybutton = cast(Button)builder.getObject("mybutton");
 +
 +
 + mybutton.addOnClicked(delegate void(Button b){
 + string t= myentry.getText();
 + if (t!="")
 + {
 + mylabel.setLabel(t);
 + }else{
 + mylabel.setLabel("Inserisci il testo nella entry e clicca sul bottone.");
 + }
 + });
 +
 +
 + mywin.showAll();
 +
 + }
 +
 +
 + application.addOnActivate(&initGui);
 + return application.run(args);
 +}
 +
 +</code>
 +
 +
 +**gui.ui**
 +<code xml>
 +<?xml version="1.0" encoding="UTF-8"?>
 +<!-- Generated with glade 3.40.0 -->
 +<interface>
 +  <requires lib="gtk+" version="3.24"/>
 +  <object class="GtkApplicationWindow" id="mywin">
 +    <property name="can-focus">False</property>
 +    <child>
 +      <object class="GtkBox">
 +        <property name="visible">True</property>
 +        <property name="can-focus">False</property>
 +        <property name="orientation">vertical</property>
 +        <child>
 +          <object class="GtkLabel" id="mylabel">
 +            <property name="visible">True</property>
 +            <property name="can-focus">False</property>
 +            <property name="label" translatable="yes">label</property>
 +          </object>
 +          <packing>
 +            <property name="expand">False</property>
 +            <property name="fill">True</property>
 +            <property name="position">0</property>
 +          </packing>
 +        </child>
 +        <child>
 +          <object class="GtkEntry" id="myentry">
 +            <property name="visible">True</property>
 +            <property name="can-focus">True</property>
 +          </object>
 +          <packing>
 +            <property name="expand">False</property>
 +            <property name="fill">True</property>
 +            <property name="position">1</property>
 +          </packing>
 +        </child>
 +        <child>
 +          <object class="GtkButton" id="mybutton">
 +            <property name="label" translatable="yes">button</property>
 +            <property name="visible">True</property>
 +            <property name="can-focus">True</property>
 +            <property name="receives-default">True</property>
 +          </object>
 +          <packing>
 +            <property name="expand">False</property>
 +            <property name="fill">True</property>
 +            <property name="position">2</property>
 +          </packing>
 +        </child>
 +      </object>
 +    </child>
 +  </object>
 +</interface>
 +
 +</code>
 +
 +===== Un meson.build =====
 +
 +Uso il compilatore ldc e lib[g]phobos da gdc.
 +
 +<code python>
 +project('simple', 'd',
 +  version : '0.1',
 +  default_options : ['buildtype=debugoptimized']
 +)
 +
 +gtk_pkg = 'gtk+-3.0'
 +gtkd_pkg = 'gtkd-3'
 +
 +gtk = dependency(gtk_pkg, method: 'pkg-config')
 +gtkd = dependency(gtkd_pkg, method: 'pkg-config')
 +
 +# se gtkd non è trovato, prova a usare i flags manuali (opzionale)
 +if not gtkd.found()
 +  error('gtkD pkg-config dependency "' + gtkd_pkg + '" non trovata. Assicurati che gtkd sia installato e pkg-config veda gtkD-3.0.')
 +endif
 +
 +# sorgenti
 +sources = files('main.d')
 +
 +# target eseguibile
 +executable('simple',
 +  sources,
 +  dependencies: [gtkd, gtk],
 +  install: true,
 +  link_args: ['-Wl,-Bstatic', '-lgphobos', '-Wl,-Bdynamic']
 +  #d_module_version: '0.1'
 +)
  
 </code> </code>
programmazione/d/gtkd/hello_world.1751540335.txt.gz · Ultima modifica: 03/07/2025 12:58 da Fabio Di Matteo