Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/08/2007, à 19:38

dedesite

[pythonGTK/Glade] Problème de débutant

Bonjour à tous,

aujourd'hui j'ai découvert l'éditeur d'interface Glade pour Gnome et j'ai décidé de m'y mettre pour voir ce que ça donnait.

En cherchant un peu des tutos sur son utilisation (notamment avec python que j'aimerai découvrir aussi) je suis tombé sur ce site :

http://daniel.coquette.free.fr/dotclear/index.php/post/2006/12/11/Creer-des-interfaces-graphique-avec-PyGTK-et-Glade

J'ai suivis son tuto (bien que j'ai une version plus récente de Glade) mais malheureusement mon appli python ne veux pas se lancer... Il ne se passe rien quand je l'execute...

Voici le code de l'appli pyHelloWorld.py (j'ai juste changé les noms de fichiers et de fonction) :

#!/usr/bin/env python

import sys
try:
        import pygtk
        pygtk.require("2.0")
except:
        pass
try:
        import gtk
        import gtk.glade
except:
        sys.exit(1)

class HellowWorldGTK:
        """This is an Hello World GTK application"""

        def __init__(self):
               
                #Set the Glade file
                self.gladefile = "HelloWorld.glade" 
                self.wTree = gtk.glade.XML(self.gladefile)
               
                #Create our dictionay and connect it
                dic = { "on_btnClick_clicked" : self.btnHelloWorld_clicked,
                        "on_MainWindow_destroy" : gtk.main_quit }
                self.wTree.signal_autoconnect(dic)

        def btnHelloWorld_clicked(self, widget):
                print "Hello World!"


if __name__ == "__main__":
        hwg = HellowWorldGTK()
        gtk.main()

Voici le code XML généré par Glade HelloWorld.glade :

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.3.4 on Mon Aug 27 19:16:43 2007 -->
<glade-interface>
  <widget class="GtkWindow" id="winHelloWorld">
    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
    <property name="title" translatable="yes">HelloWorld</property>
    <child>
      <widget class="GtkVBox" id="vbox1">
        <property name="visible">True</property>
        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
        <child>
          <widget class="GtkLabel" id="lblClick">
            <property name="visible">True</property>
            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
            <property name="label" translatable="yes">Cliquez sur le bouton</property>
          </widget>
        </child>
        <child>
          <widget class="GtkButton" id="btnClick">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
            <property name="label" translatable="yes">Click Me!!</property>
            <property name="response_id">0</property>
            <signal name="clicked" handler="on_btnClick_clicked"/>
          </widget>
          <packing>
            <property name="position">1</property>
          </packing>
        </child>
      </widget>
    </child>
  </widget>
</glade-interface>

Comme vous pouvez le voir, vraiment du très basique... Le truc c'est que je ne m'y connais pas du tout en Python et je ne sais donc pas comment bien utiliser ce langage.

C'est à dire que je ne sais pas comment debuggé, puis je connais pas les "trucs connus" pour planter ou les "trucs qu'on oublis tout le temps de faire et qui font que ça marche pas".

A mon avis, le problème ne viens pas du code mais plutôt de ma façon de l'utiliser, voici ce que je tappe dans mon terminal pour lancer l'application :

sudo python pyHelloWorld.py

Ca ne fait rien (enfin ça n'écris rien mais je peu plus rien écrire dans le terminal), puis quand je fais CTRL+C, voici ce qu'il m'affiche :

Traceback (most recent call last):
  File "pyHelloWorld.py", line 35, in <module>
    gtk.main()
KeyboardInterrupt

Je suis débutant en programmation sous linux, donc merci d'être indulgent big_smile et merci aussi pour votre future aide wink.

A+
dede

Dernière modification par dedesite (Le 27/08/2007, à 19:39)

Hors ligne

#2 Le 28/08/2007, à 08:21

bipede

Re : [pythonGTK/Glade] Problème de débutant

Ton fichier glade n'est pas complet...
il te manque la ligne

<property name="visible">True</property>

pour le widget gtkWindow, et c'est ce qui fait que la fenêtre n'apparaît pas quand tu lance l'application.
De plus, dans ton script python, tu as décrit au sein du dictionnaire des signaux, un signal destroy pour une fenêtre appelée MainWindow et qui n'existe pas dans ton fichier glade, la fenêtre principale qui y est décrite s'appelant winHelloWord.
J'ai l'impression que ton fichier glade est un fichier bricolé.
Je me trompe ?


Desktop: MSI - Intel® Core™ i5-3330 CPU @ 3.00GHz × 4 - RAM 8 go- Kubuntu 21.04 - Système sur SSD 64 Go - /home sur HDD 500 Go.
Laptop: DELL Inspiron-15 3567 - Intel® Core™ i5-7200 CPU @ 2.50GHz × 4 - RAM 8 go - HDD 1 To - Ubuntu 20.10 avec /home séparé.

Mon site: Les contributions du bipède

Hors ligne

#3 Le 28/08/2007, à 11:11

dedesite

Re : [pythonGTK/Glade] Problème de débutant

pour le widget gtkWindow, et c'est ce qui fait que la fenêtre n'apparaît pas quand tu lance l'application.
De plus, dans ton script python, tu as décrit au sein du dictionnaire des signaux, un signal destroy pour une fenêtre appelée MainWindow et qui n'existe pas dans ton fichier glade, la fenêtre principale qui y est décrite s'appelant winHelloWord.
J'ai l'impression que ton fichier glade est un fichier bricolé.
Je me trompe ?

Ok, merci pour l'info, c'est bizarre que la propriété visible ne soit pas mis a True d'office... Mon fichier glade a été créé direct avec Glade 3, il devrait mettre la propriété visible a true au moins.

Pour la MainWindow, c'est moi qui avait changer le nom dans glade mais j'ai oublié de le changer dans le code (vu qu'il provenait de l'exemple).

En tout cas merci de ton aide, je vais tester ça sur le champs wink.

A+
dede

EDIT : Ca marche!! big_smile Merci a toi, bon maintenant j'ai les bases pour faire des progs sous linux si j'ai envis de m'y mettre (j'aurais peut-être pas le temps maintenant mais c'est cool que ça marche wink )

Dernière modification par dedesite (Le 28/08/2007, à 11:43)

Hors ligne