Pygtk Glade 질문 : 왜이 간단한 스크립트가 작동하지 않습니까?
문제
나는 Glade를 사용하여 UIS를 구성하기 위해 작은 Pygtk 응용 프로그램을 작성하고 있습니다. 나는 이미 그 창을 이미 만들었지 만 어떤 이유로 든 이것은 작동하지 않습니다. 나는 다음과 같은 추적을 얻는다 :
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
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()
그리고 여기에 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>
이상한 점은 Signal_AutoConnect (self) 호출을 꺼내면 창이 열립니다. 그러나 해당 호출을 "self.on_testclass_destroy (self, none, none)"로 바꾸면 동일한 NameerRor 예외를 반환합니다.
잘 작동하는 몇 가지 다른 창 클래스를 만들었 기 때문에 이것이 왜 작동하지 않는지 이해하지 못합니다.
다음 코드가 여기있는 사람에게 작동합니까?
해결책
해당 코드와 창 및 신호 연결은 여기에서 잘 작동합니다.
신호 핸들러를 호출 할 때 작은 버그가 있습니다. 위젯 만 인수로 전달되므로 신호 핸들러는 데이터 인수가 없어야합니다.
def on_TestClass_destroy(self, widget):
gtk.main_quit()
데이터 인수는 신호 핸들러에 추가 상태가 필요한 경우 Connect에 제공된 데이터 인수입니다.
제휴하지 않습니다 StackOverflow