pygtk clareira pergunta: por que não é esse script simples de trabalhar?
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?
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.