[Python] Problema con Gtk
Ciao ragazzi sto avendo delle difficoltà con l'interfaccia grafica GTK+3 con binding PyGObject (sito). Devo realizzare un portale che inserito il nome utente e la password accede ad una schermata.
Il primo problema è che nonostante abbia visto molte guide su internet non sono riuscito a centrare gli oggetti presenti sulla schermata.
Questo è il codice
Voglio che la Label e i campi Entry(login e password) siano al centro della schermata, mentre il pulsante "Accesso"sia accanto all'Entry Password.
Il secondo problema è che vorrei accedere al metodo "controlloAccesso", presente su un altro file chiamato "RegistrazioneUtente.py", tramite il metodo "avvioPortale" presente nel codice sopra(per ora stampa a video i campi login e password, ma in futuro dovrà mandare quei campi a quel metodo). Essendo che ho programmato con java non so come fare questa operazione.
L'ultimo problema è se con python si possono realizzare "interfaccia" come su java. Ho letto che non sono necessarie ma essendo che ho un grafico UML con alcune "interfaccie", non so se conviene metterle oppure no.
Da premettere che sono alle prime armi con python, ma già ho molta esperienza con Java, Javascript, PHP, C e Matlab.
Ringrazio in anticipo
Il primo problema è che nonostante abbia visto molte guide su internet non sono riuscito a centrare gli oggetti presenti sulla schermata.
Questo è il codice
from gi.repository import Gtk class Avvio(Gtk.Window): login="" password="" def __init__(self): # Gtk.Window.__init__(self,title="project-python-library") self.set_border_width(10) self.set_default_size(500,300) self.set_position(Gtk.WindowPosition(1)) box=Gtk.Box(spacing=10) box.set_homogeneous(False) left_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL,spacing=10) left_box.set_homogeneous(False) right_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL,spacing=10) right_box.set_homogeneous(False) box.pack_start(left_box,True,True,0) box.pack_start(right_box,True,True,0) testo=Gtk.Label("Inserisci login e password per accedere") left_box.pack_start(testo,False,True,0) l = Gtk.Entry() left_box.pack_start(l,False, True,0) p = Gtk.Entry() p.set_visibility(False) p.set_invisible_char("*") left_box.pack_start(p,False, True,0) button=Gtk.Button("Accesso") button.connect("clicked",self.avvioPortale) right_box.pack_start(button,False,True,0) self.add(box) self.login=l self.password=p def avvioPortale(self,button): print(self.login.get_text()) print(self.password.get_text()) win=Avvio() win.connect("delete-event", Gtk.main_quit) win.show_all() Gtk.main()
Voglio che la Label e i campi Entry(login e password) siano al centro della schermata, mentre il pulsante "Accesso"sia accanto all'Entry Password.
Il secondo problema è che vorrei accedere al metodo "controlloAccesso", presente su un altro file chiamato "RegistrazioneUtente.py", tramite il metodo "avvioPortale" presente nel codice sopra(per ora stampa a video i campi login e password, ma in futuro dovrà mandare quei campi a quel metodo). Essendo che ho programmato con java non so come fare questa operazione.
L'ultimo problema è se con python si possono realizzare "interfaccia" come su java. Ho letto che non sono necessarie ma essendo che ho un grafico UML con alcune "interfaccie", non so se conviene metterle oppure no.
Da premettere che sono alle prime armi con python, ma già ho molta esperienza con Java, Javascript, PHP, C e Matlab.
Ringrazio in anticipo
Risposte
"corel_86":
Il secondo problema è che vorrei accedere al metodo "controlloAccesso", presente su un altro file chiamato "RegistrazioneUtente.py", tramite il metodo "avvioPortale" presente nel codice sopra(per ora stampa a video i campi login e password, ma in futuro dovrà mandare quei campi a quel metodo). Essendo che ho programmato con java non so come fare questa operazione.
Metodi e classi di un file "File" possono essere acceduti importandoli dal modulo "File":
from RegistrazioneUtente import avvioPortale avvioPortale()
"corel_86":
L'ultimo problema è se con python si possono realizzare "interfaccia" come su java. Ho letto che non sono necessarie ma essendo che ho un grafico UML con alcune "interfaccie", non so se conviene metterle oppure no.
Non mi risulta che in Python esistano le interfacce. È un linguaggio senza tipizzazione statica, quindi non avrebbero granché senso.
Perfetto ho risolto il problema numero 2, speriamo che qualcun'altro mi aiuti col problema numero 1.
Grazie claudio86
Grazie claudio86
Come è già stato detto, in Python non servono interfacce.. Ma se proprio vuoi avere delle "interfacce" puoi creare una classe astratta e usare l'ereditarietà. Python supporta anche l'ereditarietà multipla. In generale comunque, se hai una funziona che accede ad un qualche metodo di un argomento che gli viene passato, puoi passare qualsiasi oggetto che abbia quel metodo. Non sei forzato a limitarti ad una interfaccia.
"apatriarca":
Come è già stato detto, in Python non servono interfacce.. Ma se proprio vuoi avere delle "interfacce" puoi creare una classe astratta e usare l'ereditarietà. Python supporta anche l'ereditarietà multipla. In generale comunque, se hai una funziona che accede ad un qualche metodo di un argomento che gli viene passato, puoi passare qualsiasi oggetto che abbia quel metodo. Non sei forzato a limitarti ad una interfaccia.
Ok si ho già visto le classe astratte e utilizzerò proprio quelle. Perfetto problema 3 risolto.
Resta l'uno che riguarda l'interfaccia grafica.
Grazie apratiarca