Bloquer la fenêtre pendant l'exécution de l'enfant

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,
J'utilise PyGObject pour créer mes GUIs en Python 3. Je l'apprend grâce à la documentation principalement. Mais me voici complètement bloqué. J'aimerais que quand une fenêtre ouvre une autre fenêtre, la fenêtre parente se bloque en attendant que la fenêtre enfant aie finie ce qu'elle a à faire. Voici mon code :

1
2
3
4
5
6
7
8
def on_edit_pressed(self, button, selection):
        model, treeiter = selection.get_selected()
        if treeiter is not None:
            edit_plane = PlanesManagerWindow(model[treeiter][1])
            edit_plane.window.connect('delete-event', edit_plane.app_quit)
            edit_plane.window.show_all()
            # Ici le programme attend que la fenêtre se ferme
            self.update_file_list()  

Cette fonction ouvre une grosse fenêtre, et je voudrais que la fenêtre qui contient cette fonction se bloque en attendant que la grosse fenêtre aie finie. Comme ça, self.update_file_list() pourra s'exécuter.

Je ne sais pas si il y a beaucoup de monde à utiliser PyGObject, je l'espère. Mais j'imagine que ce problème se pose aussi dans d'autre librairies.

Merci de votre aide!

Vaudrait-il mieux que je le change ?

Personnellement, le décalage me fait rire, mais fait comme tu veux (c'est pas comme si tu prévoyais vraiment de faire ce que dit le titre au sens littéral ;) ).

Je ne vois pas comment faire ça, étant donné que c'est cette fenêtre qui ouvre la fenêtre enfant…

Wizix

Lors de l'ouverture de la fenêtre enfant, est-il possible de fermer la fenêtre parent puis de la rouvrir à la fin de l'exécution ? (avec une fonction déjà faite ou en DIY). Si oui, c'est peut être une solution viable. :)

+2 -0

Je ne connais pas ta librairie donc je ne peux pas vraiment t'aider, mais ce qu'il te faut c'est la notion de boîte de dialogue modale. Une boîte de dialogue modale est une boîte de dialogue qui empêche toute interaction en-dehors de celle-ci tant qu'elle n'est pas fermée, obligeant l'utilisateur à terminer ce qu'il a à faire dans cette boîte. En principe une boîte de dialogue est modale dans le cadre d'une même application, ce qui signifie qu'il n'est pas interdit de faire Alt+Tab, on ne peut juste plus interréagir avec les autres fenêtres de l'application. ON peut faire des boîtes modales globales à tout le système mais c'est à éviter, c'est particulièrement énervant.

Fais en sorte que ta fenêtre enfant soit une boîte de dialogue et non une fenêtre à part entière et indépendante, puis indique que cette boîte doit être modale. Ce concept est disponible dans toutes les bibliothèques de GUI et c'est ancré au coeur des fondements de tous les OS graphiques.

+1 -0

J'ai essayé de faire ta solution, @poliorcetics, mais je me retrouve avec des imports circulaires, ce qui fait qu'à la fin j'ai deux fenêtres parentes au lieu d'une seule.

Du coup j'envisage la solution de @QuentinC qui me semble la plus logique. Même si j'ai sérieusement la flemme de recoder toute ma fenêtre (64 inputs…), il va falloir que j'y passe. Merci de votre aide, je vais pourvoir l'exécuter cet enfant ! :p

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte