Question

J'ai écrit une petite application pygtk en utilisant Glade pour assembler les interfaces utilisateur. J'ai déjà créé plusieurs fenêtres qui fonctionnent, mais pour une raison quelconque, celle-ci ne fonctionne pas. J'obtiens le suivi suivant:

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    class TestClass:
  File "test.py", line 10, in TestClass
    self.wTree.signal_autoconnect(self)
NameError: name 'self' is not defined

Voici le contenu de test.py:

#!/usr/bin/env python

import pygtk
import gtk
import gtk.glade

class TestClass:
    def __init__(self):
        self.wTree = gtk.glade.XML("test.glade")
        self.wTree.signal_autoconnect(self)

    def on_TestClass_destroy(self, widget, data):
        gtk.main_quit()

if __name__ == "__main__":
    window = TestClass()
    gtk.main()

Et voici le fichier glade, test.glade:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Fri Nov 21 08:53:53 2008 -->
<glade-interface>
  <widget class="GtkWindow" id="TestWindow">
    <property name="visible">True</property>
    <property name="title" translatable="yes">Test Window</property>
    <signal name="destroy" handler="on_TestClass_destroy"/>
    <child>
      <placeholder/>
    </child>
  </widget>
</glade-interface>

Ce qui est étrange, c'est que si je supprime l'appel signal_autoconnect (self), la fenêtre s'ouvre. Mais si je remplace cet appel par "self.on_TestClass_destroy (self, None, None)" " à la place, il renvoie la même exception NameError.

Je ne comprends vraiment pas pourquoi cela ne fonctionne pas, car j'ai créé plusieurs autres classes de fenêtres qui fonctionnent bien.

Le code suivant fonctionne-t-il pour quelqu'un ici?

Était-ce utile?

La solution

Le code, la fenêtre et la connexion du signal fonctionnent bien ici.

Il y a cependant un petit bug lors de l'appel du gestionnaire de signal. Le gestionnaire de signal ne doit pas avoir d'argument data, car seul le widget est passé en argument.

def on_TestClass_destroy(self, widget):
    gtk.main_quit()

Les arguments de données sont uniquement ceux fournis lors de la connexion, au cas où vous auriez besoin d'un état supplémentaire pour un gestionnaire de signaux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top