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 -