Pergunta

Eu criei um muito aplicativo simples, que apresenta uma entrybox EasyGUI () e continua a ver este indefinidamente à medida que recebe entrada do usuário.

Eu posso parar o programa usando o botão como este retorna Nenhum Anular, mas eu também gostaria de ser capaz de usar o padrão 'close' botão para sair do programa. (Ie. Canto superior direito de uma janela do Windows, superior esquerdo de uma janela Mac) Este botão atualmente não faz nada.

Tendo um olhar para o EasyGUI módulo eu encontrei esta linha:

root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )

Este parece ser o culpado. Não sou especialista tkinter mas eu provavelmente poderia trabalhar para fora como para alterar esse manipulador de agir do jeito que eu quiser.

No entanto, como eu prefiro não mexer sobre com o módulo EasyGUI, Existe uma maneira de substituir esse comportamento do meu script principal, e ter o botão de fechar, quer fechar o programa pura e simples ou retorno Nenhum?

Foi útil?

Solução

Seria necessário alterar o módulo EasyGUI, sim. Vou buscá-la modificado!

** I enviou um e-mail para o criador EasyGUI explicando isso [12:12, janeiro 23/09]

** Eu só quero dizer que a possibilidade de esta mudança acontecer - se em tudo, o que eu duvido - é muito pequeno. Você vê, EasyGUI pretende ser um simples, forma discreta para criar GUIs. Eu acho que este aditamento não ajudaria qualquer, especialmente desde que a interface é muito seqüencial, de modo que seria confuso para novos usuários. [12:19, janeiro 23/09]

** O criador EasyGUI disse isso em resposta ao meu e-mail:

Um EasyGUI diálogo não deve sair a aplicação - que deve passar de volta um valor para o chamador e deixar o chamador decidir o que fazer.

Mas esta é uma ideia interessante. Ao invés de simplesmente ignorar um clique em o ícone "fechar", caixas EasyGUI poderia retornar o mesmo valor que um clique no o botão "cancelar" retornaria. Eu vou meditar sobre isso.

- Steve Ferg

Eu acho que este é o progresso, pelo menos. [02:40, janeiro 23/09]

Outras dicas

Eu não sei agora, mas você já tentou algo parecido com isto:

root.protocol('WM_DELETE_WINDOW',  self.quit)

ou

root.protocol('WM_DELETE_WINDOW',  self.destroy)

Eu não tentei, mas o Google algo como "Tkinter protocol WM_DELETE_WINDOW"

Eu encontrei uma solução, a resposta é abaixo da caixa de escolha, quando define algumas funções (você pode simplesmente digitar para encontrar denyWindowManagerClose) e vá para onde ele define. Apenas apagá-lo e colocar esse código em seu lugar.

    def denyWindowManagerClose():
#------------------------------------------------------------------
#  Changed by ProgrammingBR
#  Enables the user to close the window without entering a value
#  Youtube URL: https://www.youtube.com/channel/UCTZh6kWz_iYACNE6Jcy2lhw
#------------------------------------------------------------------
    global __enterboxText
    __enterboxText = None
    boxRoot.quit()

Você pode criar um arquivo de backup, mas isso vai funcionar para todas as caixas, as sugestões dadas aqui além de isso não vai funcionar, eu tentei a eles. se você quiser ver Eu tenho um vídeo sobre ele (é em Português, mas você pode segui-lo) basta ir ao canal youtube, vou enviá-lo em breve e postar o link aqui:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top