Glade aboutDialog não fecha
Pergunta
Eu tenho uma caixa de AboutDialog
feita em clareira, mas o botão Fechar não funciona. Eu não sei como conectar este botão para uma função separada, uma vez que fica em um widget chamado dialog-action_area
.
Outro problema é se eu usar o botão de fechar criado pelo gerenciador de janelas, eu não posso abri-lo novamente, porque foi destruída.
Como posso mudar isso para que ele apenas esconde?
Solução
Você precisa chamar o método do widget hide () quando você recebe de exclusão ou cancelar sinais:
response = self.wTree.get_widget("aboutdialog1").run() # or however you run it
if response == gtk.RESPONSE_DELETE_EVENT or response == gtk.RESPONSE_CANCEL:
self.wTree.get_widget("aboutdialog1").hide()
Você pode encontrar o tipo de resposta constantes em a documentação GTK
Outras dicas
Como qualquer outra janela de diálogo, eles exigem que você
- Faça uso do método de execução.
- Faça uso do sinal "reponse"
O primeiro irá bloquear o loop principal e irá retornar assim que o diálogo recebe uma resposta, este pode ser, clique em qualquer botão na área de ação ou pressionar Esc, ou chamar o método resposta do diálogo ou "destruir" a janela , o último não significa que a janela wil ser destruído, isso significa que o método run () vai sair e retornar uma resposta. assim:
response = dialog.run()
Se você usar um depurador, você vai notar que as principais estadias de loop lá até que você clique em um botão ou tentar fechar o diálogo. Depois de ter recebido resposta yout, então você pode useit como quiser.
response = dialog.run()
if response == gtk.RESPONSE_OK:
#do something here if the user hit the OK button
dialog.destroy()
O segundo permite que você use a caixa de diálogo em um material não-bloqueio, então você tem que ligar o seu diálogo com o sinal de "resposta".
def do_response(dialog, response):
if response == gtk.RESPONSE_OK:
#do something here if the user hit the OK button
dialog.destroy()
dialog.connect('response', do_response)
Agora, você percebe que você tem que destruir o seu diálogo