私は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()
問題は、インスタンスがメソッドに2回渡されることです。それをクリックして上の
が印刷されます。
(<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)>
編集のようなものを印刷し、なぜ道、によって
。
はい、私は、argsが 'self'、' widget'と 'event'であることを理解しています。しかし、「自己はウィジェット」なので、それが何であっても必要はない。 '@ staticmethod'定義を' 'self'を除外するために使うことができました。しかし、実際には静的メソッドではないので、正しい解決策ではないと私は思っています。他のオプションはありますか? – akaRem
あなたの質問から、あなたは「第二の」自己がどこから来たのか分からなかったようです。私は私の答えを更新しました – jadkik94
ありがとうございました。質問に不正確なことを申し訳ありません(英語は母国語ではありません)。私は、ラムダラッパーが完全に正しいわけではないと思う。特に私は多くの方法を定義しています。より洗練されたソリューションがあるようです。 – akaRem