Utilisation de Glade 3.40 avec Python 3.10.6 sous Linux
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:
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:
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:
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:
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