Als Ergänzung zu @theGtkNerd Antwort.
Dies kann ein Fehler sein. In der Tat, seine Antwort auf Ihre andere Frage, wo er schlägt vor, den Knopf in eine Gtk.EventBox zu wickeln und dann die Methode set_above_child
zu verwenden, tut den Trick.
Wie auch immer, meine Ergänzung ist, dass Ihre Methode do_anything
nicht vollständig ist. In der Tat müssen Sie Wahr oder Falsch zurück:
def do_anything(wid, event):
print("clicked", event.get_click_count()[1], "times")
return False
Dies geschieht, weil der button-press-event
Rückruf einen Booleschen Wert zurück, um anzuzeigen, wenn das Signal an die übergeordneten Widgets propagieren sollte.
Wenn Sie beispielsweise einen Rückruf auf das Ereignis button-press-event
setzen und dann true zurückgeben, erhalten Sie keine einzelnen, doppelten oder dritten Klickereignisse. Dies geschieht, weil von True Rückkehr es anzeigt, dass das Signal nicht weiter entlang es Eltern der bis zum Toplevel-Widget propagieren sollte:
from gi.repository import Gtk, Gdk # this code line imports Gtk, Gdk, ... module
def do_anything(wid, event):
print "clicked ", event.get_click_count()[1], "times"
return False
def do_button(wid, event):
print "button clicked"
return True
w = Gtk.Window(title="_Simple_Window_")
w.connect("delete-event", Gtk.main_quit)
evbox = Gtk.EventBox()
evbox.connect("button-press-event", do_anything)
w.add(evbox)
vb = Gtk.VBox()
evbox.add(vb)
lb = Gtk.Label("I am a label")
vb.add(lb)
btn = Gtk.Button("I am a button\nWhen You Single Click me do_anything function not work !")
btn.connect("button-press-event", do_button)
vb.add(btn)
w.show_all()
#Gdk.set_show_events (True)
Gtk.main()
Wenn Sie den obigen Code testen, werden Sie feststellen, dass die Ereignisse auf dem Schaltfläche wird nicht an die EventBox weitergegeben.
Was bedeutet das?
Nun, es scheint, dass die button-press-event
für eine einzelne isolierte Presse nicht propagiert wird. Wenn Sie einen "Doppelklick" versuchen, wird es sich mit einer Anzahl von 2 fortpflanzen und drei aufeinander folgende Klicks werden auch das Signal weiterleiten.
Es scheint sich um einen Fehler zu handeln, aber es werden weitere Details benötigt, z. B. den gtk Quellcode zu graben, um den Grund zu finden.
Können Sie Ihren vollständigen Code veröffentlichen? Oder zumindest ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve)? – theGtknerd
okey werde ich danke machen. – Nomad
@theGtknerd, ich habe es getan. – Nomad