جتك السؤال الفسحه: لماذا لا يتم هذا السيناريو بسيط يعمل؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

ولقد تم كتابة كتابة تطبيق جتك صغير باستخدام الفسحه لوضع معا معهد اليونسكو للإحصاء. لقد خلق عدة نوافذ بالفعل هذا العمل، ولكن لسبب ما لا يعمل هذا واحد. أحصل على 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

وهنا محتويات 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()

وهنا هو ملف الفسحه، 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.on_TestClass_destroy (النفس، لا شيء، لا شيء)" بدلا من ذلك، فإنها ترجع الاستثناء ذاته NameError.

وأنا حقا لا أفهم لماذا هذا لا يعمل، ولقد خلقت عدة فئات نافذة الأخرى التي تعمل بشكل جيد.

هل التعليمة البرمجية التالية يعمل لأحد هنا؟

هل كانت مفيدة؟

المحلول

وهذا رمز والنافذة وإشارة اتصال العمل غرامة هنا.

وهناك خلل صغير على الرغم من عند استدعاء معالج الإشارة. يجب معالج إشارة يكن لديك حجة البيانات، حيث يتم تمرير فقط القطعة كحجة.

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

والحجة البيانات (ق) ليست سوى تلك المنصوص على اتصال في حال كنت بحاجة إلى دولة إضافية لمعالج الإشارة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top