Pergunta

Eu tenho escrito escrevendo um pequeno aplicativo pygtk usando clareira para montar as UIs. Eu criei várias janelas já que o trabalho, mas por alguma razão este não está funcionando. Eu recebo a seguinte traceback:

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

Aqui está o conteúdo 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()

E aqui está o arquivo clareira, 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>

O estranho é que se eu tirar a chamada signal_autoconnect (self), a janela se abre. Mas se eu substituir a chamada com "self.on_TestClass_destroy (self, Nada, Nada)" em vez disso, ele retorna a mesma exceção NameError.

Eu realmente não entendo por que isso não está funcionando, como eu criei várias outras classes de janela que funcionam bem.

É o seguinte código de trabalho para qualquer um aqui?

Foi útil?

Solução

Esse código e janela e sinal de trabalhos de ligação bem aqui.

Há um pequeno bug que ao chamar o manipulador de sinal. O manipulador de sinal não deve ter um argumento de dados, uma vez que apenas o widget é passado como um argumento.

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

O argumento de dados (s) são apenas aquelas fornecidas em conexão em caso de necessidade estado extra para um manipulador de sinal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top