View Full Version : [C] Interfaccia grafica Linux/windows
Ciao a tutti come da titolo volevo creare un interfaccia grafica!:) (finestre dove si accettano condizioni,si naviga tra le directory,dove si selezionano delle condizioni ecc.)sia per windows che per linux...mi spiego meglio,vorrei creare finestre usando lo stesso "metodo" senza dover imparare due "metodi" diversi..
sapete indicarmi qualche guida?scusate se come sempre mi sono spiegato male:doh:
ingframin
25-10-2013, 10:44
Ciao a tutti come da titolo volevo creare un interfaccia grafica!:) (finestre dove si accettano condizioni,si naviga tra le directory,dove si selezionano delle condizioni ecc.)sia per windows che per linux...mi spiego meglio,vorrei creare finestre usando lo stesso "metodo" senza dover imparare due "metodi" diversi..
sapete indicarmi qualche guida?scusate se come sempre mi sono spiegato male:doh:
Python + PySide (Qt)
1) portabile senza differenze
2) facile da interfacciare con C
3) Veloce da programmare
[Kendall]
25-10-2013, 10:57
Le possibilita' essenzialmente sono due, o meglio 2 e mezza.
La prima prevede l'uso del framework QT (ottimo strumento, rodato da anni e largamente usato). Questo pero' e' un framework per C++ quindi dovresti impararti quest'ultimo (cosa abbastanza semplice se arrivi da C).
La soluzione "1.5" sarebbe quella di utilizzare C++ per tutte le parti che concernono l' interfaccia grafica e scrivere invece la logica in C (cosa fattibilissima, ma richiede comunque un minimo di pratica di C++ per la parte grafica).
L'altra soluzione invece e' l'impiego delle librerie GTK, disponibili sia per linux che per Windows, che sono invece per C e quindi non dovresti mettere mano ad altri linguaggi.
Consiglio mio e' quello di impararti il C++, linguaggio ben piu' adatto alla scrittura di interfacce grafiche, o ancor meglio il C# che tramite il framework MONO permette la scrittura di applicazioni visuali (tramite WinForm) sia per linux che per Windows che per OSX, ed e' secondo me tutto un altro pianeta come esperienza di programmazione per questa tipologia di applicativi.
;40169431']Le possibilita' essenzialmente sono due, o meglio 2 e mezza.
La prima prevede l'uso del framework QT (ottimo strumento, rodato da anni e largamente usato). Questo pero' e' un framework per C++ quindi dovresti impararti quest'ultimo (cosa abbastanza semplice se arrivi da C).
La soluzione "1.5" sarebbe quella di utilizzare C++ per tutte le parti che concernono l' interfaccia grafica e scrivere invece la logica in C (cosa fattibilissima, ma richiede comunque un minimo di pratica di C++ per la parte grafica).
L'altra soluzione invece e' l'impiego delle librerie GTK, disponibili sia per linux che per Windows, che sono invece per C e quindi non dovresti mettere mano ad altri linguaggi.
Consiglio mio e' quello di impararti il C++, linguaggio ben piu' adatto alla scrittura di interfacce grafiche, o ancor meglio il C# che tramite il framework MONO permette la scrittura di applicazioni visuali (tramite WinForm) sia per linux che per Windows che per OSX, ed e' secondo me tutto un altro pianeta come esperienza di programmazione per questa tipologia di applicativi.
eh mi sembra di capire che la strada migliore sono le gtk+:)
sai per caso consigliarmi qualche guida?...
[Kendall]
25-10-2013, 16:36
Prova con la pagina per gli sviluppatori di Gnome:
https://developer.gnome.org/gtk3/3.2/
Altrimenti come libro c'è questo:
http://www.amazon.com/Foundations-Development-Experts-Voice-Source/dp/1590597931/
Io ti consiglio le Qt..
Inviato dal mio Galaxy Nexus utilizzando Tapatalk
vendettaaaaa
25-10-2013, 17:45
Se vuoi imparare a scopo didattico, penso che spaccarsi la testa con le Gtk possa essere non-inutile; se però vuoi farci dei programmini o creare addirittura qualche app, ti consiglio caldamente di lasciar perdere e usare il framework Qt, che mette a disposizione un linguaggio per la creazione delle UI, il QML (Qt Markup Language).
Guardare qua per credere: questo sviluppatore crea l'interfaccia per l'app (desktop) di Spotify in 30 minuti usando QML:
http://www.youtube.com/watch?v=Y1pqL5bXe0A&html5=1
Ovviamente lui ne sa una cifra di QML, visto che lavora sul framework Qt, però nel video non fa niente di trascendentale, visto che è una demo, non un approfondimento per esperti, eppure il risultato è mooolto buono e scrive poche righe di codice.
Le UI non si scrivono con C/C++, si usano linguaggi dichiarativi (o se preferisci descrittivi), che dicono al computer cosa vuoi vedere anzichè i passi da eseguire per ottenere quel che vuoi.
Se vuoi imparare a scopo didattico, penso che spaccarsi la testa con le Gtk possa essere non-inutile; se però vuoi farci dei programmini o creare addirittura qualche app, ti consiglio caldamente di lasciar perdere e usare il framework Qt, che mette a disposizione un linguaggio per la creazione delle UI, il QML (Qt Markup Language).
Guardare qua per credere: questo sviluppatore crea l'interfaccia per l'app (desktop) di Spotify in 30 minuti usando QML:
http://www.youtube.com/watch?v=Y1pqL5bXe0A&html5=1
Ovviamente lui ne sa una cifra di QML, visto che lavora sul framework Qt, però nel video non fa niente di trascendentale, visto che è una demo, non un approfondimento per esperti, eppure il risultato è mooolto buono e scrive poche righe di codice.
Le UI non si scrivono con C/C++, si usano linguaggi dichiarativi (o se preferisci descrittivi), che dicono al computer cosa vuoi vedere anzichè i passi da eseguire per ottenere quel che vuoi.
grazie ma mi servirebbe qualcosa in c per riuscire a tirare fuori qualcosa
[Kendall]
26-10-2013, 00:05
grazie ma mi servirebbe qualcosa in c per riuscire a tirare fuori qualcosa
Allora mi sa che le GTK sono la via migliore.
Dovrai prendere mano con l'infrastruttura che poggia sui GObject, ma é comunque un passo ben più corto dell'imparare un nuovo linguaggio e relativi Framework
Sent from my Lumia 925 using Tapatalk
ingframin
26-10-2013, 06:38
grazie ma mi servirebbe qualcosa in c per riuscire a tirare fuori qualcosa
Da dove deriva il vincolo?
Fare un'interfaccia complessa non è facile già di per se.
Farla con un linguggio come C che non ti offre molta pappa pronta
aumenta la difficoltà a dismisura per un risultato che potrebbe essere
abbastanza mediocre.
Disegnare interfacce grafiche richiede skill estetiche e "architettoniche" che già
in condizioni normali è difficile che un programmatore abbia.
Andare per la via lunga complica solo le cose.
Se non avessi avuto il vincono della portabilità ti avrei detto WPF senza rimpianti.
Se proprio devi essere portabile allora...
Io GTK non te lo avrei consigliato onestamente, è un casino immane, i pacchetti da cui dipende te li devi portare dietro su windows perché non ci sono (windows non è unix) e non hanno mai la stessa versione di quelli per linux, i risultati non sono quasi mai molto gradevoli e soprattutto
non mi pare dalla domanda che poni che tu sia un esperto di programmazione,
altrimenti saresti già andato su www.gtk.org e avresti cliccato su "download", "windows". A questa pagina trovi tutte le dipendenze e le versioni:
(dipende se vuoi per windows 32 o 64 bit)
http://www.gtk.org/download/win32.php
Io ti rinnovo il mio invito a usare python almeno per la GUI e lasciare C solo alla logica se proprio devi.
ingframin
26-10-2013, 06:42
;40173666']Allora mi sa che le GTK sono la via migliore.
Dovrai prendere mano con l'infrastruttura che poggia sui GObject, ma é comunque un passo ben più corto dell'imparare un nuovo linguaggio e relativi Framework
Sent from my Lumia 925 using Tapatalk
Uagliò stiamo parlando di GTK in C...
Siamo sicuri che non sia più facile imparare qualcosa di meno ingarbugliato?
pabloski
26-10-2013, 10:20
Potresti dare un'occhiata a questa libreria http://www.tecgraf.puc-rio.br/iup/
Comunque GTK+ è già di per sè abbastanza complessa, il futuro ( almeno a quanto leggo ) sembra molto ingarbugliato, e l'uso del C è qualcosa di micidiale.
Direi che stai seguendo la strada più difficile possibile. Ma se hai questi vincoli, allora c'è poco da fare.
Per il futuro considera di studiarti un pochino ( almeno ) il C++ e di usare QT ogni volta è possibile.
vendettaaaaa
26-10-2013, 11:03
Da come ha scritto mi pare un po' alle prime armi, quindi probabilmente l'unico vincolo che ha è "so solo un pochetto di C e voglio usare quello". Se è così, a maggior ragione evita di entrare in questo inferno...se non è così, beh, ho solo tirato ad indovinare :cool:
usa c#, su windows hai un ambiente come visualstudio e su Linux puoi usare monodevelop
[Kendall]
27-10-2013, 13:56
Uagliò stiamo parlando di GTK in C...
Siamo sicuri che non sia più facile imparare qualcosa di meno ingarbugliato?
Ah beh concordo. Nel senso, è il primo consiglio che gli ho dato quello di lasciar stare il C e rivolgersi a soluzioni migliori quali il C++ o C# (con Mono).
Se però si parte senza la voglia di apprendere un linguaggio nuovo (e di cose da imparare e schemi mentali da rivedere nel passaggio da un linguaggio procedurale come il C a linguaggi ad oggetti come C++ o C# ce ne sono) la strada è strainsalita.
Il connubio GTK&C è il classico "pain in the ***", ma se vuole procedere con il C, ad ognuno la sua croce :D
Considerazioni personali...
Le api di Gtk non sono così strane o difficili da usare:
http://www.micahcarrick.com/gtk-glade-tutorial-part-1.html
http://zetcode.com/tutorials/gtktutorial/
Se vuoi ci sono anche dei libri al proposito:
http://www.amazon.com/Foundations-Development-Experts-Voice-Source/dp/1590597931/
Elenco di documentazione utile:
http://www.gtk.org/documentation.php
Io credo che tutti riescano a seguire le tantissime risorse che si trovano su Gtk+
Secondo punto, si sta veramente consigliando di usare WinForms?
Il supporto WinForms su Mono è morto, non viene più seguito da nessuno, e su Linux ha zero integrazione grafica
http://stackoverflow.com/questions/16254547/should-i-rewrite-gui-with-gtk-instead-of-winforms-for-mono
Chi mandava avanti il progetto Mono ormai è interessato solo al mobile
Terzo, Gtk+ è l'unio toolkit che permette di interfacciarsi con praticamente ogni linguaggio di programmazione esistente (si trovano bindings per Python, Ruby, C++, Java, .Net, D, Haskell, OCalm, Go, Javascript, php...)
Quindi per esempio non conosci C perchè non hai mai fatto altro che script per il web? Gtk+ ti permette di usare anche Javascript
http://zetcode.com/gui/javascriptgtktutorial/
E proprio per una qualità che qua pare tutti vogliano ignorare, o portare a svantaggio della piattaforma ("Che schifo C, dovevano farlo in .Net!" -- cosa che neanche MS ha fatto più guardacaso, con Windows 8 Runtime): E' codice scritto in C
Sarei curioso di sapere quali altri toolkit grafici (altrattanto completi, non giocattoli) possono vantare la libertà della scelta del linguaggio che da Gtk+
Consiglio personale:
Vai pure di Gtk+
Ti piace C? Usa C!
Ti piace un linguaggio di cui nessuno ha mai sentito parlare? Probabilmente ci sarà un modo per usare quel linguaggio con Gtk+
pabloski
27-10-2013, 14:41
Chi mandava avanti il progetto Mono ormai è interessato solo al mobile
Non immaginavo che le cose stessero così male. E pensare che venivo sempre bastonato quando parlavo contro Mono :D
Stante il focus totalmente sul mobile, ci si può aspettare che Mono cominci sempre più a divergere rispetto a .Net? Lo chiedo perchè sarebbe una catastrofe nella catastrofe.
Non immaginavo che le cose stessero così male. E pensare che venivo sempre bastonato quando parlavo contro Mono :D
Stante il focus totalmente sul mobile, ci si può aspettare che Mono cominci sempre più a divergere rispetto a .Net? Lo chiedo perchè sarebbe una catastrofe nella catastrofe.
Dubito, Xamarin punta nel permettere di far toccare dispositivi mobile a chi non sa niente di Object-C o Java ed ha visto in vita sua solo .Net, o considera quest'ultimo migliore tanto da investirci dei soldi sopra
Mi chiedo se Miguel ogni tanto usi ancora una distro Linux :sofico:
pabloski
27-10-2013, 15:20
Dubito, Xamarin punta nel permettere di far toccare dispositivi mobile a chi non sa niente di Object-C o Java ed ha visto in vita sua solo .Net, o considera quest'ultimo migliore tanto da investirci dei soldi sopra
Mi chiedo se Miguel ogni tanto usi ancora una distro Linux :sofico:
Potrebbero però decidere di aggiungere delle librerie non presenti in .net, giusto per rendere ( almeno in teoria ) mono più appetibile di .net per lo sviluppo mobile.
Se aggiungiamo che già mono manca di alcune librerie di .net, ne otteniamo due cose che hanno in comune solo il fatto di avere la compilazione jit e c#.
ingframin
27-10-2013, 16:10
Io ho semplicemente suggerito di usare python + qualunque gui toolkit voglia, anche GTK volendo, perché no.
Ma considerando anche i messaggi precedenti dell'op sappiamo che è alle prime armi e non ce lo vedo a scervellarsi di capire come fare a compilare le GTK+ con Visual studio: non è difficile, però manco così facile se sei alle prime armi.
Poi faccia come gli pare: per me Python + PySide è più facile, tutto qui
Considerazioni personali...
Le api di Gtk non sono così strane o difficili da usare:
http://www.micahcarrick.com/gtk-glade-tutorial-part-1.html
http://zetcode.com/tutorials/gtktutorial/
Se vuoi ci sono anche dei libri al proposito:
http://www.amazon.com/Foundations-Development-Experts-Voice-Source/dp/1590597931/
Elenco di documentazione utile:
http://www.gtk.org/documentation.php
Io credo che tutti riescano a seguire le tantissime risorse che si trovano su Gtk+
Secondo punto, si sta veramente consigliando di usare WinForms?
Il supporto WinForms su Mono è morto, non viene più seguito da nessuno, e su Linux ha zero integrazione grafica
http://stackoverflow.com/questions/16254547/should-i-rewrite-gui-with-gtk-instead-of-winforms-for-mono
Chi mandava avanti il progetto Mono ormai è interessato solo al mobile
Terzo, Gtk+ è l'unio toolkit che permette di interfacciarsi con praticamente ogni linguaggio di programmazione esistente (si trovano bindings per Python, Ruby, C++, Java, .Net, D, Haskell, OCalm, Go, Javascript, php...)
Quindi per esempio non conosci C perchè non hai mai fatto altro che script per il web? Gtk+ ti permette di usare anche Javascript
http://zetcode.com/gui/javascriptgtktutorial/
E proprio per una qualità che qua pare tutti vogliano ignorare, o portare a svantaggio della piattaforma ("Che schifo C, dovevano farlo in .Net!" -- cosa che neanche MS ha fatto più guardacaso, con Windows 8 Runtime): E' codice scritto in C
Sarei curioso di sapere quali altri toolkit grafici (altrattanto completi, non giocattoli) possono vantare la libertà della scelta del linguaggio che da Gtk+
Consiglio personale:
Vai pure di Gtk+
Ti piace C? Usa C!
Ti piace un linguaggio di cui nessuno ha mai sentito parlare? Probabilmente ci sarà un modo per usare quel linguaggio con Gtk+
Grazie a tutti per i consigli che mi avete dato:) quindi mi sembra di capire che la cosa migliore da fare è quella di usare il c++ almeno per la parte grafica e la libreria qt visto che le Gtk+ sono più complesse e richiedono molto più tempo
vendettaaaaa
27-10-2013, 19:41
Grazie a tutti per i consigli che mi avete dato:) quindi mi sembra di capire che la cosa migliore da fare è quella di usare il c++ almeno per la parte grafica e la libreria qt visto che le Gtk+ sono più complesse e richiedono molto più tempo
Ti ricordo che però usando il framework Qt non userai il C++ per la parte grafica (potresti, ma il modo di programmare UI in C++ con Qt è simile ad usare Gtk+ e C), ma il QML che è tutt'altro. Scriveresti cose del genere:
Rectangle {
readonly property real originalWidth: 0.13
readonly property real originalHeight: 0.16
readonly property real originalRatio: originalHeight / originalWidth
property bool shown: true
property alias letter: text.text
width: height / originalRatio
height: 16
color: "black"
visible: true
Text {
id: text
anchors.centerIn: parent
font.pixelSize: parent.height
text: "K"
color: "white"
font.family: "Impact"
}
Rectangle {
id: shade
anchors.fill: parent
color: "white"
visible: true
}
states: [
State {
name: "visible"
when: shown
PropertyChanges {
target: shade
visible: false
}
}
]
}
Linguaggio dichiarativo: scrivi cosa vuoi vedere. Scrivere una cosa equivalente in C++ (sempre usando Qt) richiederebbe 5 volte tanto codice.
Non ti fare spaventare cmq: il QML è un'architettura che trasforma questo codice nel codice C++ equivalente (quello lungo 5 volte tanto). E' uno strato di astrazione in più creato per comodità e convenienza nello sviluppo delle UI.
ingframin
28-10-2013, 08:59
Grazie a tutti per i consigli che mi avete dato:) quindi mi sembra di capire che la cosa migliore da fare è quella di usare il c++ almeno per la parte grafica e la libreria qt visto che le Gtk+ sono più complesse e richiedono molto più tempo
No, non hai capito cosa intendevo perche' un po' tutti siamo stati poco chiari.
Vai qui:
http://zetcode.com/
Ci sono 1000000 tutorial su come creare gui in un sacco di linguaggi.
Scegli quello che preferisci e il toolkit che preferisci e seguilo.
Fai piu' tentativi magari, riprova a implementare la stessa cosa in 2/3
modi diversi cosi' ti rendi conto delle differenze.
Dopo applica quello che hai imparato alla tua applicazione reale.
Noi possiamo darti 10000000000000 consigli su "usa questo, usa quello..."
ma la verita' e' che il piu' facile per te sara' quello che piu' si adatta ai tuoi
schemi mentali che nessuno puo' (piu' o meno inconsciamente) conoscere meglio di se stesso.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.