Rendere una finestra ridimensionabile

Iniziamo ad applicare i primi concetti per scoprire le prime possibilità concesse dai componenti già visti, per questo scopo svilupperemo una piccolissima applicazione con due pulsanti che consentiranno e inibiranno la possibilità di ridimensionare la finestra col mouse.

Avviamo subito Glade e iniziamo a disegnare l’interfaccia semplice visibile in alto, fondamentalmente composta di una finestra (GtkWindow), una casella orizzontale (GtkHBox) e due pulsanti (GtkButton). Creare una nuova finestra e assegnare il Titolo della finestra come Finestra ridimensionabile quindi osservare qualche riga più giù la proprietà Ridimensionabile che determina la condizione iniziale che avrà la finestra, invece in questo esempio vedremo come modificare questa proprietà tramite codice Python per rendere la finestra ridimensionabile o non quando necessario.

Creata la finestra nuova inseriamo all’interno una casella orizzontale con 2 elementi e dentro ciascuno d’essi un pulsante. Cliccare sul primo pulsante e dalla finestra a destra assegnare alla proprietà Nome il valore btnRidimensionareSi, su Modifica tipo scegliere l’opzione Stock, quindi dall’elenco Pulsante Stock scegliere l’icona Adatta dimensione come visibile nella figura sotto.

Spostarsi sulla scheda Segnali e per il segnale clicked assegnare la procedura on_btnRidimensionabileSi_clicked.

Ripetere la stessa procedura per il secondo pulsante, di nome btnRidimensionabileNo, scegliendo l’icona Dimensione normale e sul segnale clicked assegnare on_btnRidimensionabileNo_clicked quindi salvare il progetto Glade col nome resizable.glade, aprire l’editor Python e scrivere il seguente codice:

import gtk
import gtk.glade
import pygtk
pygtk.require("2.0")

def on_window1_destroy(widget, data=None):
  gtk.main_quit()

def on_btnRidimensionabileSi_clicked(widget, data=None):
  window1.set_resizable(True)

def on_btnRidimensionabileNo_clicked(widget, data=None):
  window1.set_resizable(False)

segnali = {
  'on_window1_destroy': on_window1_destroy,
  'on_btnRidimensionabileSi_clicked': on_btnRidimensionabileSi_clicked,
  'on_btnRidimensionabileNo_clicked': on_btnRidimensionabileNo_clicked
}

gladeFile = gtk.glade.XML('resizable.glade')
window1 = gladeFile.get_widget('window1')
gladeFile.signal_autoconnect(segnali)

if window1:
  window1.show()
  gtk.main()

Il codice per i due pulsanti è analogo e si limita ad eseguire il metodo set_resizable con l’argomento True o False per il corrispondente pulsante. Eseguendo il progetto inizialmente la finestra sarà ridimensionabile (se non abbiamo modificato il valore iniziale su Glade), quindi cliccando sopra il pulsante Dimensione normale, non sarà più possibile allargare o stringere la finestra mediante mouse.

Contemporaneamente, se il gestore delle finestre lo consente, verrà nascosto anche il pulsante per massimizzare la finestra sulla barra del titolo. L’altro pulsante Adatta dimensione ovviamente sbloccherà questa condizione, consentendo nuovamente l’estensione mediante trascinamento.

La stessa azione del metodo set_resizable si può ottenere usando il metodo generico set_property e assegnando alla proprietà resizable il valore desiderato, ad esempio:

window1.set_property('resizable', False)

Sarà anche possibile conoscere via codice la possibilità di ridimensionare la finestra impiegando il metodo get_resizable come indicato di seguito:

print window1.get_resizable()

Resituirà il valore True per indicare che la finestra è ridimensionabile, altrimenti valore False e analogamente sarà anche possibile utilizzare la forma alternativa:

print window1.get_property('resizable')

Che ovviamente restituirà il medesimo risultato.

E’ possibile scaricare il progetto Python e l’interfaccia Glade.

0 Risposte to “Rendere una finestra ridimensionabile”



  1. Lascia un commento

Lascia un commento




Indice degli argomenti