from gi.repository import Gtk, GObject
class Window(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.button = Gtk.Button("Hi Printer")
self.button.connect("pressed", self.on_button_clicked)
self.button.connect("released", self.on_button_released)
self.add(self.button)
self.connect("delete-event", Gtk.main_quit)
def on_button_clicked(self, widget):
# arm repeater
self._repeat = True
# trigger printing
self.print_hi()
def on_button_released(self, widget):
# disarm repeater
self._repeat = False
def print_hi(self):
print 'hi'
# tune timeout for repeat rate
timeout = 50
# if should still be repeating
if self._repeat:
# arm timer, with call back to this function
GObject.timeout_add(timeout, self.print_hi)
window = Window()
window.show_all()
Gtk.main()
前の問題は、ボタンの「クリック」が上下、「押された」が下、「離された」が上です。
また、正しいタイマーを使用するように更新されました。
gtk のタイムアウト機能は自動的に再設定できることが判明したため、これはさらに簡単に行うことができます。
from gi.repository import Gtk, GObject
class Window(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.button = Gtk.Button("Hi Printer")
self.button.connect("pressed", self.on_button_clicked)
self.button.connect("released", self.on_button_released)
self.add(self.button)
self.connect("delete-event", Gtk.main_quit)
def on_button_clicked(self, widget):
# arm repeater
self._repeat = True
# kick off time out
timeout = 50
GObject.timeout_add(timeout, self.print_hi)
def on_button_released(self, widget):
# disarm repeater
self._repeat = False
def print_hi(self):
print 'hi'
# if should still be repeating
return self._repeat
window = Window()
window.show_all()
Gtk.main()
例