Sto provando a migrare un lettore audio, scritto in python, in GTK3 +. In GTK2 ho usato progress_bar.add_event (... pointer_motion_notify | button_press) (codice completo sotto) e impostare un gestore di segnale per button_press e pointer_motion_notify. In GTK3, sembra che ProgressBar() non emetta questi segnali.Gtk3 ProgressBar(): impossibile ricevere eventi in Python
Ho implementato una soluzione alternativa utilizzando Overlay() e DrawingArea() che consente a DrawingArea di emettere i segnali, ma non dovrebbe essere necessario ... Si tratta di un bug? o sto sbagliando?
Codice:
import gi
gi.require_version("Gtk","3.0")
from gi.repository import Gtk, Gdk, GObject
class MainWindow(Gtk.Window):
def __init__(self):
super(MainWindow, self).__init__(title='ProgressBar Event Test')
self.progressbar = Gtk.ProgressBar()
self.add(self.progressbar)
self.progressbar.set_events(Gdk.EventMask.BUTTON_PRESS_MASK
| Gdk.EventMask.POINTER_MOTION_MASK)
self.progressbar.connect("button-press-event", self.on_event, 'button-press')
self.progressbar.connect("motion-notify-event", self.on_event, 'motion-notify')
self.connect("delete-event", Gtk.main_quit)
self.current_progress = 0.0
GObject.timeout_add(200,self.update_progress)
self.show_all()
def on_event(self, widget, event, data=None):
print "on_event called for %s signal"%data
return False
def update_progress(self):
self.progressbar.set_fraction(self.current_progress)
self.current_progress += 0.01
return self.current_progress <= 1 # False cancels timeout
def main():
w = MainWindow()
Gtk.main()
if __name__ == '__main__':
main()
Grazie - sì, sembra una soluzione migliore (e probabilmente è stato progettato per EventBox :-) – simonltwick
@simonltwick - grazie. ricorda su qualsiasi sito di stackexchange, non dimenticare di fare clic sul pulsante di spunta accanto alla risposta che desideri e che desideri accettare. Quando hai abbastanza punti rep, fai clic sui pulsanti su o giù per dire se sei felice/scontento di una risposta. – fossfreedom