PyGTK - Clase de diálogo

Un widget de diálogo se usa normalmente como una ventana emergente en la parte superior de una ventana principal. El objetivo de un diálogo es recopilar algunos datos del usuario y enviarlos a la ventana principal. El diálogo puede ser modal (donde bloquea el marco principal) o no modal (el marco del diálogo se puede omitir).

El widget de diálogo de la biblioteca PyGTK es una ventana dividida verticalmente. En su sección superior, hay un gtk.VBox en el que se empaquetan los widgets de etiqueta o entrada. La sección inferior se llama action_area en la que se colocan uno o más botones. Dos áreas están separadas por gtk.HSeparator.

La clase gtk.Dialog tiene el siguiente constructor:

dlg = gtk.Dialog (Title = None, parent = None, flags = 0, buttons = None)

Dónde,

  • Title - Es el texto que aparece en la barra de título del widget de diálogo.

  • Parent - Es la referencia a la ventana de nivel superior desde la que aparece el diálogo.

  • Flag- Define las constantes que controlan el funcionamiento de Dialog. Las constantes definidas son:

gtk.DIALOG_MODAL Si está configurado, el cuadro de diálogo captura todos los eventos del teclado
gtk.DIALOG_DESTROY_WITH_PARENT Si se establece, el diálogo se destruye cuando su padre es.
gtk.DIALOG_NO_SEPARATOR Si se establece, no hay una barra separadora sobre los botones.

¿Qué es un botón?

Un botón es un objeto de tupla que contiene pares de gtk.Button con un ID de stock (o texto) y sus ID de respuesta.

El ID de respuesta puede ser cualquier número o una de las constantes de ID de respuesta predefinidas:

  • 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

Los métodos importantes de la clase gtk.Dialog se dan a continuación:

  • add_button() - Agrega un botón con el texto especificado por button_text (o un botón de stock, si button_text es un ID de stock) en action_area.

  • response() - Emite la señal de "respuesta" con el valor especificado en response_id

  • run() - Muestra el diálogo y devuelve el response_id cuando se emite delete_event.

  • set_default_response() - Establece el último widget en el área de acción del diálogo con el especificado response_id como el widget predeterminado para el diálogo.

El widget gtk.Dialog emite las siguientes señales:

Cerca Se emite cuando se cierra el diálogo.
Respuesta Esto se emite cuando se activa un widget action_area (botón "clicked"), el diálogo recibe un delete_event o la aplicación llama al método response ().

Dos botones en action_area del widget Dialog usan Stock IDs gtk.STOCK.CANCEL y gtk.STOCK_OK. Están asociados con los ID de respuesta gtk. RESPONSE_REJECT y gtk. RESPONSE_ACCEPT respectivamente. El diálogo se cierra cuando se presiona cualquier botón. Los métodos run () devuelven el ID de respuesta correspondiente que se puede utilizar para un procesamiento posterior.

El siguiente código muestra una ventana gtk.Window de nivel superior con un botón. Cuando se hace clic en el botón, aparece un cuadro de diálogo con una etiqueta y dos botones.

Ejemplo

Observe el siguiente código:

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()

El código anterior produce la siguiente salida:

Widgets de diálogo preconfigurados

La API de PyGTK tiene una serie de widgets de diálogo preconfigurados:

  • MessageDialog
  • AboutDialog
  • ColorSelectionDialog
  • FontSelectionDialog
  • FileChooserDialog

Para demostrar el funcionamiento del diálogo estándar anterior en PyGTK, se coloca un menú con un elemento de menú que invoca un diálogo cuando se hace clic en él, en una ventana gtk.Window en el siguiente programa. Se enumeran las funciones de devolución de llamada que responden para activar la señal de cada elemento del menú. También puede comprender la explicación proporcionada para cada tipo de widget de diálogo.

Ejemplo

Observe el siguiente código:

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()

El código anterior generará la siguiente salida: