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.
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>
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
#!/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()
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
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)
Sur cette erreur, quelques forums évoque une incompatibilité entre Python 3.10 et GTK 4.0.
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 :
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
Faut-il utiliser une autre version de Glade, une autre version de GTK ?
Merci de votre aide