Olá a todos: tentei construir uma GUI que possui várias abas. Se eu colocar todas as funções em uma classe, a classe será muito longa e poderá haver algumas funções de widget com o mesmo nome. Assim, eu gostaria de usar uma classe para construir uma aba (chamada de classe tab), que retorna um TagGroup. Em seguida, use uma classe uiframe para combinar todos os TagGroups das classes da guia. Mas tenho 3 perguntas:
- Onde definir o método de mudança, na classe tab?
- Onde definir o ouvinte, na classe tab?
- Se eu quiser usar o método change da classe tab a para controlar algo na classe b, isso é possível?
Se alguém tiver uma ideia melhor para tornar a classe uiframe mais elegante, também será apreciada.
A propósito, existe algum código python que possa gerar facilmente a UI do Gatan?
Cumprimentos
Chen ZX
Como você descobriu, as classes que definem as propriedades e o comportamento dos diálogos DM personalizados são inerentemente longas e podem ser bastante complexas. Não creio que haja alguma maneira de realmente evitar isso. Qualquer classe de diálogo personalizada normalmente definirá e implementará dezenas de métodos. No entanto, esses métodos membros são provavelmente sua melhor esperança para modularizar seu código de diálogo.
Sua pergunta provavelmente é muito mais ampla do que você imagina e talvez seja necessário dividi-la em várias partes para cobrir todos os detalhes envolvidos. No entanto, começarei fornecendo uma estratégia de alto nível e alguns esclarecimentos sobre classes, objetos e funções.
Certamente é uma boa ideia modularizar a geração dos vários componentes de qualquer diálogo DM baseado na classe UIFrame. Geralmente é suficiente fazer isso por meio de funções (métodos) definidas na classe de diálogo personalizada.
Primeiro, alguns comentários gerais sobre conceitos e terminologia. É útil perceber que UIFrame é uma classe base e que o código que se escreve para definir, representar e dar suporte a um diálogo personalizado é uma extensão dessa classe base. Dizemos que a classe de diálogo personalizada é “derivada de” UIFrame. Quando alguém chama Alloc() em uma classe de diálogo personalizada, isso retorna um Object que é uma instância específica da classe de diálogo personalizada, ou seja, um painel de interface do usuário exibido e em execução com manipulação de eventos ativos. Observe que é possível iniciar várias instâncias de um determinado diálogo usando a mesma classe de diálogo personalizado (derivada de UIFrame).
Voltando à sua pergunta específica sobre a modularização do código da guia em sua classe de diálogo personalizada, as palavras que você usa para descrever o que você gostaria de alcançar [... usar uma classe para construir uma guia (chamada classe de guia), que retorna um TagGroup] são bastante reveladores. O que eles descrevem é realmente a ação de uma função, ou seja, o fato de retornar um TagGroup que é o descritor do elemento tab. Assim, minha sugestão seria simplesmente definir cada uma de suas guias de diálogo com uma função diferente (ou seja, método de sua classe de diálogo personalizada). Se eles forem semelhantes o suficiente, você poderá até mesmo parametrizar sua função de definição de guia para poder usá-la para retornar um descritor TagGroup (diferente) para cada uma de suas guias específicas.
Quanto às suas perguntas sobre manipulação de eventos (ou seja, métodos de mudança e ouvintes), em última análise, esses métodos sempre precisarão fazer parte de sua classe de diálogo personalizada porque o DM sempre invoca os métodos de mudança por meio de sua referência ao seu objeto de diálogo específico (ou seja, um dada instância da sua classe de diálogo personalizada). É claro que esses métodos de manipulação de eventos podem usar outros métodos/funções (e até mesmo outros objetos) para realizar seu trabalho, mas você precisará definir e implementar métodos em sua classe de diálogo personalizada que o DM chamará em resposta a eventos e mudanças. dentro do seu objeto GUI personalizado.