Frage

Ich habe das Schreiben benutzen Lichtung eine kleine pygtk Anwendung schreibe gemeinsam den UIs zu setzen. Ich habe bereits, dass die Arbeit mehrere Fenster erstellt, aber aus irgendeinem Grund dieses funktioniert nicht. Ich erhalte die folgenden Zurückverfolgungs:

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

Hier ist der Inhalt von 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()

Und hier ist die Lichtung Datei, 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>

Das Merkwürdige ist, dass wenn ich die signal_autoconnect (Selbst-) Anruf herausnehmen, das Fenster öffnet. Aber wenn ich diesen Anruf mit „self.on_TestClass_destroy (self, None, None)“ ersetzen sondern es gibt die gleiche Nameerror Ausnahme.

Ich verstehe wirklich nicht, warum das nicht funktioniert, wie ich mehrere andere Fenster Klassen erstellt haben, die gut funktionieren.

Wird der folgende Code arbeitet für jemanden hier?

War es hilfreich?

Lösung

Dieser Code und Fenster und Signalverbindung funktioniert hier.

Es gibt einen kleinen Fehler, obwohl, wenn das Signal-Handler aufrufen. Die Signal-Handler sollten kein Datum Argument haben, da nur das Widget als Argument übergeben wird.

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

Die Daten Argument (en) sind nur diejenigen, bei Verbindung, falls vorgesehen, müssen Sie zusätzlichen Zustand für einen Signal-Handler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top