tkinter e métodos de programação GUI

Felizmente, isso não se enquadra no "tópico de discussão geral", já que eu gostaria que fosse mais sobre resolver esses problemas de maneira eficiente do que um debate gigante sobre qual abordagem geral da programação da GUI é a melhor absolut

Então eu comecei alguma programação GUI com tkinter e, para encurtar a história, meu código está ficando muito feio rapidamente. Estou tentando criar um editor de mapas baseado em blocos para um videogame. Meus problemas principais parecem ser:

incapacidade dos retornos de chamada retornarem valore incapacidade de transferir dados entre janelas facilment

Presumo que a razão pela qual os vejo como problemas seja porque estou usando funções muito mais do que classes. Por exemplo, minha janela "load tileset" é totalmente funcional: ao clicar na opção de menu na janela principal, a função que carrega a nova janela é chamada. A partir dessa janela, crio uma caixa de diálogo de arquivo aberto ao procurar a imagem e modifico a tela que exibe a imagem quando pressiono a tecla Enter (para que ela desenhe a grade apropriada sobre a imagem). função função função.

O que me parece uma péssima prática é a inclusão de argumentos extras para compensar. Por exemplo, quando eu crio um conjunto de peças, a instância da classe TileSet criada deve ser enviada de volta à janela principal, onde as informações apropriadas podem ser exibidas. Eu tenho uma lista de conjuntos de peças carregadas como uma variável global (prática ainda mais ruim: tudo que lida com minha janela raiz está no escopo global! Yay!) E, como as funções de retorno de chamada não retornam valores, eu passo essa lista como argumento à minha função "carregar janela do conjunto de peças", queentã passa o argumento para a função criar conjunto de peças (chamada quando você clica no botão apropriado na janela), onde é realmente necessário para que eu possa adicionar meu conjunto de peças recém-criado à lista. Passar argumentos através de uma função 'hierarquia' assim parece uma ideia horrível. Fica confuso, é horrível escrever código modular e geralmente parece desnecessári

Minha tentativa de corrigir o problema seria escrever uma classe representando a GUI inteira e classes de janela personalizadas (que a classe da GUI pode criar e referenciar) que podem realmente armazenar dados relevantes. Isso deve resolver os problemas de transferência de dados entre janelas. Espero que isso também reduza meu uso gratuito de funções lambda em retornos de chamada. Mas eu estou pensando: esse é o melhor caminho? Ou pelo menos perto? Prefiro não começar a reescrever e depois acabar com outro sistema que é desleixado e confuso de uma maneira diferente. Sei que meus métodos são ruins, mas realmente não sei qual seria a melhor abordagem. Estou recebendo muitos conselhos sobre como fazer coisas específicas, mas nenhum sobre como estruturar o programa como um todo. Qualquer ajuda seria muito apreciada

questionAnswers(1)

yourAnswerToTheQuestion