Pagina 1 di 2

Programmare in pygobject

Inviato: dom ott 01, 2017 14:22
da ZeroUno
Premesse:
1) di natura sono un sistemista e non un programmatore, tuttavia programmazione l'ho studiata e la uso, ma principalmente in bash e php
2) non mi piace python
3) non so programmare in python; ho solo fatto qualcosa di base; molte sintassi la devo ancora imparare

detto questo riconosco che è arrivato il momento di colmare questa lacuna, ma non mi voglio annoiare con l'abc. La programmazione già la conosco, la sintassi la imparo strada facendo.

Ho un programma scritto in bash che pecca di mancanza di grafica. Ho provato con kdialog (che è incluso in slackware) con risultati a malapena sufficienti; qualcosa in più ho ottenuto con altri simili ma non inclusi in slackware (e la cosa è mandatoria).

So che con pygtk - che è incluso in slackware - si fanno tante cosine carine, così vorrei cogliere l'occasione per imparare questo linguaggio di programmazione.

Come cominciare in pygtk?

Intanto ho notato che da pochissimo in current è stato introdotto python3 ma lasciando anche python2.

Molti tutorial in giro sono basati su python3, ma il mio script almeno per un po' deve girare sia su current che su slackware14.2, quindi python2 è una scelta obbligatoria.

Quanta incompatibilità c'è tra i due?
Da quelle poche righe di codice che ho scritto la 'print' è altamente cambiata e la sintassi non è totalmente retrocompatibile.



Un altro motivo per imparare il python è che mio fratello - che sta iniziando a programmare ora - ha deciso di iniziare con python e ovviamente mi capita di dargli una mano a livello di programmazione in generale (che implica vedere il codice che scrive).
Lui usa python3 e una volta che ho fatto uno script in python2 ho dovuto usare la 'import from future' (mitico :) ) della funzione 'print' per ottenere lo stesso output (pochi giorni prima che è uscito python3 su slackware current)

Re: Programmare in pygtk

Inviato: dom ott 01, 2017 15:09
da brg
Non sono un programmatore Python, quindi prendi quel che scrivo al riguardo cum grano salis:

ZeroUno ha scritto:Quanta incompatibilità c'è tra i due?


Tanta. C'erano differenze importanti anche tra sottoversioni di Python, tipo tra la 2.2, la 2.4 e la 2.6.

Detto ciò, esistono alternative come PHP-GTK, che però non è disponibile né in Slackware né su Slackbuilds, Perl-Qt, disponibile in Slackware, nonché l'immarcescibile Tcl/Tk, disponibile in Slackware. Io personalmente uso Perl-Tk, disponibile su Slackbuilds, perché è estremamente portabile: è un modulo da 800kB che dipende da perl e Tk, che sono praticamente sempre presenti, anche sui sistemi più minimali e su Windows con Strawberry Perl. Per il BASH il più usato è Zenity che è l'interfaccia predefinita di winetricks (un programmino per installare librerie sotto wine).

Re: Programmare in pygtk

Inviato: dom ott 01, 2017 15:23
da ZeroUno
Ho usato zenity come alternativa a kdialog ottenendo risultati migliori ma non adatti allo scopo.
Ho anche pensato di usare grafica in perl, ma tutte le soluzioni necessitano l'installazione di altri moduli non già presenti in slackware, condizione questa mandatoria.
In aggiunta l'aggiunta di una gui a questo programma in bash non è strettamente mandatorio ma più che altro un pretesto per imparare il python che per tanto ho snobbato.

Re: Programmare in pygtk

Inviato: lun ott 02, 2017 11:52
da lablinux
usa python3, il 2 ormai è in dismissione (almeno un 5/6 anni). Sono poche le librerie non compatibile con python3
Installalo da slackbuild. Per la parte grafica non posso aiutarti, l'ho usato per eseguire programmi batch o come applicativi web (django).
[edit] PS pygtk è fermo al 2011, se devi fare qualcosa di nuovo, forse ti conviene puntare su altro, dai un'occhiata a http://insights.dice.com/2017/08/07/7-top-python-gui-frameworks-for-2017-2/ [/edit]

Re: Programmare in pygtk

Inviato: lun ott 02, 2017 12:50
da ZeroUno
E' mandatorio che funzioni con quanto è preinstallato in slackware.

Meglio se in slackware 14.2 anche, ma visto che python3 è stato inserito solo in current devo pensarci se rompere o meno la compatibilità con la stabile.
E' anche possibile che per quando avrò terminato sarà uscita la slackware 14.3 (o 15 che sia) ma per ora devo imparare. Quando ci avrò capito qualcosa di più potrò decidere meglio.

Di quelli linkati mi sembra che solo PyObject sia presente in slackware, sia per python2 che 3 preinstallato. In effetti noto che pygtk3 (se esiste) non è stato inserito in current.

Per quelle poche cose che ho fatto finora in pygtk sembra che sia abbastanza semplice.

Ho provato ad avviare un programma scritto per python2 con python3 per prova. Al di là del fallimento per librerie incompatibili, il primo fallimento è stato sugli spazi!!! Lo script metteva su alcune righe i tab e su altre gli spazi. Già non mi piace la rigidità della spaziatura... python3 è ancora più rigido! Io per sicurezza uso solo spazi quando programmo.

Re: Programmare in pygtk

Inviato: lun ott 02, 2017 13:47
da lablinux
quella che tu 'disprezzi' io apprezzo tantissimo, perché risulta un codice ben indentato che migliora la leggibilità.
Io uso sempre gli spazi i tab, a volte non campaiono o sono diversamente interpretati. Configuro gli editor per sostituire i tab con 4 spazi.

Re: Programmare in pygtk

Inviato: lun ott 02, 2017 14:12
da ZeroUno
In verità anche un codice scritto in un qualsiasi altro linguaggio di programmazione può essere ben indentato, ma l'indentazione la decido e - soprattutto - un ciclo o una if mi termina con un endif o una graffa chiusa o qualcosa che mi indica una fine e non un semplice cambio di indentazione che può introdurre in errore.
Inoltre l'indentazione che faccio io non è solo strutturale (if() { }) ma anche logica.

Codice: Seleziona tutto

inizializzazione variabile A
    inizializzazione variabile A1
    inizializzazione variabile A2
inizializzazione variabile B
    ...


Anche a me non piacciono i tab e soprattutto 8 sono troppi; io a seconda dei casi configuro gli editor con tab da soli 2 spazi e altre volte 4, e dentro lo stesso codice a seconda di quello che fa il codice a volte indento di più. Ma molti li amano tanto i tab.

Ma quì entriamo in filosofia e conseguenti flame.

Indentazione a parte (che è solo una cosa estetica alla fine e marginale ai fini funzionali) è presto per dire se questo linguaggio mi piacerà sotto gli altri aspetti o meno.

nota.
Mi sono appena accorto che la slackware da cui sto scrivendo oggi (non ieri) è quella che ancora non ho aggiornato e quindi non ha python3.
Tuttavia ha PyObject3 che - a questo punto - si chiama così non per la relazione a python3 ma piuttosto per la relazione a gtk3.

Non aggiorno ora perchè a casa ho avuto un problema con l'integrazione libreoffice<->kde e voglio assicurarmi prima che non sia dipeso dall'aggiornamento (ed evitare quindi lo stesso problema sul pc del lavoro)

Re: Programmare in pygtk

Inviato: lun ott 02, 2017 14:27
da lablinux
scusa ma non hai la 14.2?
Hai provato ruby? Molti si innamorano di questo linguaggio.

PS ho trovato """programmi""" (php) scritti un po con tab e un po con spazi e un po non indentati (oltre ad essere scritti con il biiip) e quando lo script è lungo hai voglia a ritrovartici.

Re: Programmare in pygtk

Inviato: lun ott 02, 2017 15:02
da ZeroUno
14.2 non ha python 3.
No, ho la current. A casa aggiornata a ieri, al lavoro aggiornata a 10gg fa. Su quella al lavoro ho anche kde5.
Ovviamente sulla workstation. Sui server non si mette la current, ma nel mio caso neanche la stable ma redhat.
Slackware 14.2 ormai è vecchia.

Re: Programmare in pygtk

Inviato: lun ott 02, 2017 15:27
da lablinux
ah, ok (concordo la slackware stable è vecchia)

Re: Programmare in pygtk

Inviato: lun ott 02, 2017 18:14
da ZeroUno
(quasi) nessun problema a leggere documentazione in inglese, ma c'è qualche buon tutorial/documentazione in italiano per PyGObject?
Vedo che su slackware c'è anche PyQt4, ma in fase di transizione da kde4 a kde5 (chissà quando lo metterà nella slackware ufficiale) meglio aspettare.. una cosa per volta.

Re: Programmare in pygtk

Inviato: mar ott 03, 2017 8:38
da lablinux
scusa ma non ho capito, devi creare qualcosa che giri in produzione su Redhat o ti stai 'divertendo' per fare qualcosa di grafico?

PS con python puoi crearti un ambiente virtuale (https://virtualenv.pypa.io/en/stable/) dove puoi fare tutte le prove che vuoi e poi butti tutto. Ad esempio ti installi tramite pip, dentro il tuo ambiente, le librerie python che ti servono, ci giochi e poi decidi.

Re: Programmare in pygtk

Inviato: mar ott 03, 2017 8:57
da ZeroUno
I server di produzione non si toccano. E nemmeno quelli di sviluppo. Sono sistemista, non programmatore, al massimo può capitare troubleshooting.

Gira sulla mia workstation di lavoro e di casa, e potenzialmente su quello di altri.

Mi sto "divertendo" in verità si traduce con "è ora di imparare il python" per colmare questa lacuna, e per farlo traduco il programma scritto in bash basato su dialog in uno scritto in python basato su gtk.

Re: Programmare in pygobject

Inviato: mer ott 04, 2017 0:18
da ZeroUno
mi sto scontrando con questo:
http://python-gtk-3-tutorial.readthedoc ... t.html#id5
ridotto all'osso la parte che non mi funziona è questa:

Codice: Seleziona tutto

        color = Gdk.color_parse('blue')
        rgba = Gdk.RGBA.from_color(color)
        area = Gtk.DrawingArea()
        area.set_size_request(24, 24)
        area.override_background_color(0, rgba)
        button.add(area)

dovrebbe disegnare un bottone blu, ma rimane il colore di default, mentre sullo screenshot del tutorial viene colorato.

Le impostazioni di 'area' le prende perchè se cambio quei 24 la differenza si vede. Quello che non prende è l'override_backgroud_color.
Dov'è l'intoppo?

se do una print di rgba mi da
Gdk.RGBA(red=0.000000, green=0.000000, blue=1.000000, alpha=1.000000)
quindi sembra ok. Ma non ho trovato documentazione su override_background_color e soprattutto come vedere gli attributi di area e button

Re: Programmare in pygtk

Inviato: mer ott 04, 2017 8:28
da lablinux

Codice: Seleziona tutto

dir(oggetto)

nel tuo caso, prova con

Codice: Seleziona tutto

dir(button)
e con

Codice: Seleziona tutto

print button.__doc__