Я пытаюсь подкласс gtk.DrawingArea. Вот проблема в коде.pyGTK подклассификация выпуск. Двойное самопрохождение к методу
class ClusterGraph(gtk.DrawingArea):
def __init__(self):
super(ClusterGraph, self).__init__()
self.add_events(gtk.gdk.BUTTON_PRESS_MASK)
self.connect('button-press-event', self.on_mouse_dn)
def on_mouse_dn(*args):
print args
window = gtk.Window()
window.connect("destroy", gtk.main_quit)
window.set_default_size(300, 600)
cg = ClusterGraph()
window.add(cg)
window.show_all()
gtk.main()
Проблема в том, что экземпляр передается методу дважды.
на кнопку печатает:
(<ClusterGraph object at 0x30167d8 (GtkDrawingArea at 0x2531610)>, <ClusterGraph object at 0x30167d8 (GtkDrawingArea at 0x2531610)>, <gtk.gdk.Event at 02F75F08: GDK_BUTTON_PRESS x=164,00, y=354,00, button=1>)
и мой обратный вызов фактически эквивалентно для
def on_mouse_dn(self, self, event)
Как решить эту проблему? Или это нормально !?
, кстати, почему он печатает
<ClusterGraph object at 0x30167d8 (GtkDrawingArea at 0x2531610)>
, а не что-то вроде
<ClusterGraph object at 0x30167d8 (ClusterGraph at 0x2531610)>
Edit: Вопрос заключается в том, чтобы удалить дополнительный аргумент.
Да, я понимаю, что args - это 'self',' widget' и 'event'. Но «я виджет», поэтому мне он не нужен (независимо от того, что он называется) дважды. Я могу использовать определение '@ staticmethod' для« исключения »' self'. Но на самом деле это не статический метод, поэтому я считаю, что это неправильное решение. Есть ли другие варианты? – akaRem
Хорошо. Кажется, из вашего вопроса, что вы не знали, откуда взялось «второе» я. Я обновил свой ответ – jadkik94
Спасибо. Извините за неточность в вопросе (английский не мой родной язык). Я думаю, что всплывающие лямбда-обертки не совсем правильны. Особенно, если я определяю много методов. Кажется, есть более элегантное решение. – akaRem