PyGTK - classe de diálogo

Um widget de diálogo é normalmente usado como uma janela pop-up no topo de uma janela pai. O objetivo de um Diálogo é coletar alguns dados do usuário e enviá-los para a janela pai. O diálogo pode ser modal (onde bloqueia o quadro pai) ou não modal (o quadro do diálogo pode ser ignorado).

O widget de diálogo da biblioteca PyGTK é uma janela dividida verticalmente. Em sua seção superior, há um gtk.VBox no qual Label ou Entry Widgets são empacotados. A seção inferior é chamada action_area, na qual um ou mais botões são colocados. Duas áreas são separadas por gtk.HSeparator.

A classe gtk.Dialog tem o seguinte construtor -

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

Onde,

  • Title - O texto está aparecendo na barra de título do widget de diálogo.

  • Parent - É a referência para a janela de nível superior a partir da qual a caixa de diálogo aparece.

  • Flag- Define as constantes controlando a operação do Dialog. As constantes definidas são -

gtk.DIALOG_MODAL Se definido, a caixa de diálogo captura todos os eventos de teclado
gtk.DIALOG_DESTROY_WITH_PARENT Se definido, a caixa de diálogo é destruída quando seu pai é.
gtk.DIALOG_NO_SEPARATOR Se definido, não há barra separadora acima dos botões.

O que é um botão?

Um botão é um objeto de tupla que contém pares de gtk.Button com um ID de estoque (ou texto) e seus IDs de resposta.

O ID de resposta pode ser qualquer número ou uma das constantes predefinidas de ID de resposta -

  • 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

Os métodos importantes da classe gtk.Dialog são fornecidos abaixo -

  • add_button() - Adiciona um botão com o texto especificado por button_text (ou um botão de estoque, se button_text for um ID de estoque) em action_area.

  • response() - Emite o sinal de "resposta" com o valor especificado em response_id

  • run() - Exibe a caixa de diálogo e retorna o response_id quando delete_event é emitido.

  • set_default_response() - Define o último widget na área de ação da caixa de diálogo com o especificado response_id como o widget padrão para o diálogo.

O widget gtk.Dialog emite os seguintes sinais -

Fechar Isso é emitido quando o diálogo é fechado.
Resposta Isso é emitido quando um widget action_area é ativado (botão "clicado"), o diálogo recebe um delete_event ou o aplicativo chama o método response ().

Dois botões em action_area do widget Dialog usam IDs de estoque gtk.STOCK.CANCEL e gtk.STOCK_OK. Eles estão associados aos IDs de resposta gtk. RESPONSE_REJECT e gtk. RESPONSE_ACCEPT respectivamente. A caixa de diálogo é fechada quando qualquer botão é pressionado. O método run () retorna o ID de resposta correspondente que pode ser utilizado para processamento posterior.

O código a seguir exibe um gtk.Window de nível superior com um botão nele. Quando o botão é clicado, uma caixa de diálogo aparece com um rótulo e dois botões.

Exemplo

Observe o seguinte 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()

O código acima produz a seguinte saída -

Widgets de diálogo pré-configurados

A API PyGTK tem vários widgets Dialog pré-configurados -

  • MessageDialog
  • AboutDialog
  • ColorSelectionDialog
  • FontSelectionDialog
  • FileChooserDialog

Para demonstrar o funcionamento da caixa de diálogo padrão acima no PyGTK, um menu com um item de menu, cada qual invocando uma caixa de diálogo quando clicado, é colocado em uma gtk.Window no programa a seguir. As funções de retorno de chamada que respondem para ativar o sinal de cada item do menu são listadas. Você também pode entender a explicação fornecida para cada tipo de widget de diálogo.

Exemplo

Observe o seguinte 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()

O código acima irá gerar a seguinte saída -