PyGTK - Classe di dialogo
Un widget Finestra di dialogo viene normalmente utilizzato come una finestra a comparsa sulla parte superiore di una finestra principale. L'obiettivo di una finestra di dialogo è raccogliere alcuni dati dall'utente e inviarli alla finestra principale. Il dialogo può essere modale (dove blocca il frame principale) o non modale (il frame di dialogo può essere ignorato).
Il widget Finestra di dialogo della libreria PyGTK è una finestra divisa verticalmente. Nella sua sezione superiore, c'è un gtk.VBox in cui sono impacchettati i widget Label o Entry. La sezione inferiore è chiamata action_area in cui sono posizionati uno o più pulsanti. Due aree sono separate da gtk.HSeparator.
La classe gtk.Dialog ha il seguente costruttore:
dlg = gtk.Dialog (Title = None, parent = None, flags = 0, buttons = None)
Dove,
Title - Il testo appare nella barra del titolo del widget Finestra di dialogo.
Parent - È il riferimento alla finestra di primo livello da cui si apre la finestra di dialogo.
Flag- Definisce le costanti che controllano il funzionamento della finestra di dialogo. Le costanti definite sono:
gtk.DIALOG_MODAL | Se impostato, la finestra di dialogo cattura tutti gli eventi della tastiera |
gtk.DIALOG_DESTROY_WITH_PARENT | Se impostato, la finestra di dialogo viene distrutta quando il suo genitore è. |
gtk.DIALOG_NO_SEPARATOR | Se impostato, non è presente alcuna barra di separazione sopra i pulsanti. |
Cos'è un pulsante?
Un Button è un oggetto tupla contenente coppie di gtk.Button con un ID stock (o testo) e i suoi ID di risposta.
L'ID risposta può essere un numero qualsiasi o una delle costanti ID risposta predefinite -
- gtk.RESPONSE_NONE
- gtk.RESPONSE_REJECT
- gtk.RESPONSE_ACCEPT
- gtk.RESPONSE_DELETE_EVENT
- gtk.RESPONSE_OK
- gtk.RESPONSE_CANCEL
- gtk.RESPONSE_CLOSE
- gtk.RESPONSE_YES
- gtk.RESPONSE_NO
- gtk.RESPONSE_APPLY
- gtk.RESPONSE_HELP
Di seguito sono riportati i metodi importanti della classe gtk.Dialog:
add_button() - Aggiunge un pulsante con il testo specificato da button_text (o un pulsante di borsa, se button_text è un ID di borsa) in action_area.
response() - Emette il segnale di "risposta" con il valore specificato in response_id
run() - Visualizza la finestra di dialogo e restituisce response_id quando viene emesso delete_event.
set_default_response() - Imposta l'ultimo widget nell'area di azione della finestra di dialogo con il file specificato response_id come widget predefinito per la finestra di dialogo.
Il widget gtk.Dialog emette i seguenti segnali:
Vicino | Viene emesso alla chiusura della finestra di dialogo. |
Risposta | Viene emesso quando viene attivato un widget action_area (pulsante "cliccato"), la finestra di dialogo riceve un delete_event o l'applicazione chiama il metodo response (). |
Due pulsanti nella action_area del widget di dialogo utilizzano gli ID Stock gtk.STOCK.CANCEL e gtk.STOCK_OK. Sono associati agli ID di risposta gtk. RESPONSE_REJECT e gtk. RESPONSE_ACCEPT rispettivamente. La finestra di dialogo viene chiusa quando viene premuto un pulsante qualsiasi. I metodi run () restituiscono l'ID di risposta corrispondente che può essere utilizzato per ulteriori elaborazioni.
Il codice seguente mostra una finestra gtk.Window di primo livello con un pulsante. Quando si fa clic sul pulsante, viene visualizzata una finestra di dialogo con un'etichetta e due pulsanti.
Esempio
Rispettare il codice seguente:
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Dialog Demo")
self.set_default_size(250, 200)
fixed = gtk.Fixed()
btn = gtk.Button("Show")
btn.connect("clicked",self.show_sialog)
fixed.put(btn,100,100)
self.add(fixed)
self.connect("destroy", gtk.main_quit)
self.show_all()
def show_sialog(self, widget, data=None):
dialog = gtk.Dialog("My dialog",
self,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
label = gtk.Label("Simple dialog")
dialog.vbox.add(label)
label.show()
res = dialog.run()
print res
dialog.destroy()
if __name__ == '__main__':
PyApp()
gtk.main()
Il codice precedente produce il seguente output:
Widget di dialogo preconfigurati
L'API PyGTK ha una serie di widget di dialogo preconfigurati -
- MessageDialog
- AboutDialog
- ColorSelectionDialog
- FontSelectionDialog
- FileChooserDialog
Per dimostrare il funzionamento della finestra di dialogo standard di cui sopra in PyGTK, un menu con una voce di menu che richiama ciascuna una finestra di dialogo quando viene cliccato, viene inserito in una finestra gtk.Window nel seguente programma. Vengono elencate le funzioni di richiamata che rispondono all'attivazione del segnale di ciascuna voce di menu. È inoltre possibile comprendere la spiegazione fornita per ogni tipo di widget di dialogo.
Esempio
Rispettare il codice seguente:
import gtk, pango
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Dialog Boxes")
self.set_default_size(250, 200)
self.set_position(gtk.WIN_POS_CENTER)
mb = gtk.MenuBar()
menu1 = gtk.Menu()
file = gtk.MenuItem("_File")
file.set_submenu(menu1)
msg = gtk.MenuItem("MessageDialog")
menu1.append(msg)
abt = gtk.MenuItem("AboutDialog")
menu1.append(abt)
colo = gtk.MenuItem("colorDialog")
menu1.append(colo)
font = gtk.MenuItem("FontSelectionDialog")
menu1.append(font)
fl = gtk.MenuItem("FileChooserDialog")
menu1.append(fl)
mb.append(file)
vbox = gtk.VBox(False, 2)
vbox.pack_start(mb, False, False, 0)
self.add(vbox)
self.text = gtk.Label("TutorialsPoint")
vbox.pack_start(self.text, True, True, 0)
msg.connect("activate",self.on_msgdlg)
abt.connect("activate",self.on_abtdlg)
font.connect("activate",self.on_fntdlg)
colo.connect("activate",self.on_color)
fl.connect("activate", self.on_file)
self.connect("destroy", gtk.main_quit)
self.show_all()
def on_msgdlg(self, widget):
#MessageDialog usage code
def on_abtdlg(self, widget):
#AboutDialog usage code
def on_fntdlg(self,widget):
#FontSelectionDialog usage code
def on_color(self, widget):
#ColorChooserDialog usage cde
Def on_file(self, widget):
#FileChooserDialog usage code
if __name__ == '__main__':
PyApp()
gtk.main()
Il codice sopra genererà il seguente output: