Pygtk Glade 질문 : 왜이 ​​간단한 스크립트가 작동하지 않습니까?

StackOverflow https://stackoverflow.com/questions/308913

  •  08-07-2019
  •  | 
  •  

문제

나는 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에 제공된 데이터 인수입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top