Pergunta

Eu só quero o equivalente a fechar e reabrir o meu programa principal. Quero chamá-lo quando um "novo" opção -como a partir de um menu drop-down é clicado. Algo como a chamada root.destroy () e, em seguida, re-iniciar a mainloop.

Como posso conseguir este feito?

Foi útil?

Solução

Você pode levar toda a sua lógica de construção GUI e código do estado inicial para fora do mainloop e colocá-lo em funções. Chamar essas funções a partir do mainloop (algo como: buildgui () & initstate ()) e, em seguida, quando o usuário clica no ícone de menu, basta ligar initstate () para configurá-lo de volta como era quando o aplicativo foi iniciado primeira

Outras dicas

Há pelo menos três maneiras que você pode resolver isso.

Método um: o falso cabeça . Quando você cria seu aplicativo, não colocar todos os widgets na janela de raiz. Em vez disso, ocultar a janela de raiz e criar um novo nível superior que representa a sua aplicação. Quando você reiniciar é apenas uma questão de destruir esse novo nível superior e re-executar toda a lógica o seu start-up.

Método dois: Nuke e pavimentar . Similar em conceito, mas um pouco diferente em execução. Neste modelo, quando você deseja reiniciar você simplesmente apagar todos os widgets na janela principal, redefinir a geometria como nulo (para que a janela será mais uma vez redimensionar próprio com base em seu conteúdo) e, em seguida, executar a lógica que atrai todos os outros widgets .

Método três: se ele trabalhou pela primeira vez ... Como sugerido por Martin v Löwis, simplesmente tem seu programa exec uma nova instância do programa, em seguida, sair..

Os dois primeiros métodos são potencialmente mais rápido e tem as (des?) Vantagem de preservar o ambiente atual. Por exemplo, você poderia salvar a cópia da área de transferência, a largura das colunas, etc. O terceiro método absolutamente garante uma lousa em branco.

Se você estiver em Unix, reinicie todo o aplicativo com os.execv. Certifique-se de passar todos os argumentos de linha de comando, etc.

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