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

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
programmazione:d:gtkd:hello_world [03/07/2025 13:05] – Fabio Di Matteoprogrammazione:d:gtkd:hello_world [02/09/2025 23:03] (versione attuale) – Fabio Di Matteo
Linea 2: Linea 2:
  
 Autore: **//Fabio Di Matteo//** \\ Ultima revisione:  **//  03/07/2025 12:56   //**  // // Autore: **//Fabio Di Matteo//** \\ Ultima revisione:  **//  03/07/2025 12:56   //**  // //
 +
 +<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 . \\ 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  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]]+[[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 40: 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.1751540726.txt.gz · Ultima modifica: 03/07/2025 13:05 da Fabio Di Matteo