bonjour,
Après une expérience de développement d'une application Python avec tKinter, j'ai tenté ces dernières semaines d'utiliser Glade et Gtk+.
Sous Linux Mint 21.1, avec Python en version 3.10.6, j'ai installé Glade en version 3.40 Flathub.
J'ai créé une IHM simpliste dans Glade, avec un GtkWindow, GtkFixed, GtkButton et GtkLabel.
Et j'ai essayé d'afficher cette IHM dans un module Python, inspiré des exemples trouvés dans mes recherches :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 <?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.40.0 --> <interface> <requires lib="gtk+" version="3.24"/> <object class="GtkWindow" id="myWin01"> <property name="can-focus">False</property> <child> <object class="GtkFixed"> <property name="visible">True</property> <property name="can-focus">False</property> <child> <object class="GtkButton" id="myW01Butt01"> <property name="label" translatable="yes">Vas-y clique</property> <property name="width-request">100</property> <property name="height-request">80</property> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> <signal name="clicked" handler="on_myW01Butt01_clicked" swapped="no"/> </object> <packing> <property name="x">172</property> <property name="y">14</property> </packing> </child> <child> <object class="GtkLabel" id="myW01Lab01"> <property name="width-request">100</property> <property name="height-request">80</property> <property name="visible">True</property> <property name="can-focus">False</property> <property name="label" translatable="yes">label</property> </object> <packing> <property name="x">173</property> <property name="y">117</property> </packing> </child> </object> </child> </object> </interface>
Je rencontre une erreur à l'exécution qui porte sur la section <packing>, qui définit la position des widgets dans le fichier .glade.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #!/usr/bin/python3.10 # -*- coding: utf-8 -*- import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk class MyFirstGlade: def __init__(self): interface = Gtk.Builder() interface.add_from_file('MyFirstGlade.glade') self.myW01Lab01 = interface.get_object("myW01Lab01") interface.connect_signals(self) def on_mainWindow_destroy(self, widget): gtk.main_quit() def on_myW01Butt01_clicked(self, widget): self.myW01Lab01.set_text("coucou c'est moi") if __name__ == "__main__": MyFirstGlade() Gtk.main()
Sur cette erreur, quelques forums évoque une incompatibilité entre Python 3.10 et GTK 4.0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 python3 "MyFirstGlade.py" Traceback (most recent call last): File "/home/zardoz/01 Leviia/85 Développement VBA VBS Python/90 Python/Apprentissage Glade/MyFirstGlade.py", line 23, in <module> MyFirstGlade() File "/home/zardoz/01 Leviia/85 Développement VBA VBS Python/90 Python/Apprentissage Glade/MyFirstGlade.py", line 11, in __init__ interface.add_from_file('MyFirstGlade.glade') gi.repository.GLib.GError: gtk-builder-error-quark: No function named `on_myW01Butt01_clicked`. (14)
Si je modifie mon source Python pour mette en cohérence le contrôle de version GTK avec [requires lib="gtk+" version="3.24"] du fichier .glade, le programme Python reste bloqué dans le terminal, interrompu par Ctrl+C :
Faut-il utiliser une autre version de Glade, une autre version de GTK ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 python3 "MyFirstGlade.py" Traceback (most recent call last): File "/home/zardoz/01 Leviia/85 Développement VBA VBS Python/90 Python/Apprentissage Glade/MyFirstGlade.py", line 24, in <module> Gtk.main() File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 1687, in main with register_sigint_fallback(Gtk.main_quit): File "/usr/lib/python3.10/contextlib.py", line 142, in __exit__ next(self.gen) File "/usr/lib/python3/dist-packages/gi/_ossighelper.py", line 237, in register_sigint_fallback signal.default_int_handler(signal.SIGINT, None) KeyboardInterrupt
Merci de votre aide
Partager