运行 python GTK3 TextView空闲时的方法
run a method when TextView is idle in python GTK3
考虑使用一个简单的 window 和 Gtk.textView
#!/usr/bin/python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class myWindow(Gtk.Window):
def __init__(self):
...
self.txtBuffer = Gtk.TextBuffer()
self.txtView = Gtk.TextView(buffer = self.txtBuffer)
...
def autosave(self):
# code to save txtBuffer content to a file
我希望在 txtView
空闲时(写入停止一段时间后,比如 5 秒)自动保存方法为 运行,但我不知道发生了什么事件) 使用。
向键释放事件添加一个回调,它将更新一个布尔标志,指示键盘上的键被按下,然后添加一个定期(定义为 5 秒)检查按键标志的超时函数,如果是,则自动保存。
#!/usr/bin/python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class myWindow(Gtk.Window):
def __init__(self):
...
self.txtBuffer = Gtk.TextBuffer()
self.txtView = Gtk.TextView(buffer = self.txtBuffer)
#####################################################################
self.txtView.connect ("key-release-event", self.on_key_release_event)
GLib.timeout_add_seconds(5, self.check_autosave_timer)
#####################################################################
...
def autosave(self):
# code to save txtBuffer content to a file
def check_autosave_timer(self):
if self.keypressed:
self.autosave(self)
self.keypressed = False
return True
def on_key_release_event(self, event, user_data):
self.keypressed = True
编辑:
刚刚检查过您可能还想考虑鼠标复制粘贴。 Gtk.TextBuffer 有 改变的 信号。您可以对此使用相同的方法,例如。 on_textbuffer_changed 您设置标志,然后在 glib.timeout 您将保存。也许这是更好的方法,包括击键和鼠标事件。
另请注意,此解决方案将在 keystroke/textbuffer 更改 5 秒后保存。要做到这一点,只有在闲置 5 秒后,必须使用计时器,并且每次文本缓冲区更改时重置计时器,以便只有当计时器超过定义的空闲保存时间时,超时功能才会保存( timeout_add_seconds 定时回调的频率必须低于为空闲自动保存计时器选择的频率。
考虑使用一个简单的 window 和 Gtk.textView
#!/usr/bin/python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class myWindow(Gtk.Window):
def __init__(self):
...
self.txtBuffer = Gtk.TextBuffer()
self.txtView = Gtk.TextView(buffer = self.txtBuffer)
...
def autosave(self):
# code to save txtBuffer content to a file
我希望在 txtView
空闲时(写入停止一段时间后,比如 5 秒)自动保存方法为 运行,但我不知道发生了什么事件) 使用。
向键释放事件添加一个回调,它将更新一个布尔标志,指示键盘上的键被按下,然后添加一个定期(定义为 5 秒)检查按键标志的超时函数,如果是,则自动保存。
#!/usr/bin/python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class myWindow(Gtk.Window):
def __init__(self):
...
self.txtBuffer = Gtk.TextBuffer()
self.txtView = Gtk.TextView(buffer = self.txtBuffer)
#####################################################################
self.txtView.connect ("key-release-event", self.on_key_release_event)
GLib.timeout_add_seconds(5, self.check_autosave_timer)
#####################################################################
...
def autosave(self):
# code to save txtBuffer content to a file
def check_autosave_timer(self):
if self.keypressed:
self.autosave(self)
self.keypressed = False
return True
def on_key_release_event(self, event, user_data):
self.keypressed = True
编辑:
刚刚检查过您可能还想考虑鼠标复制粘贴。 Gtk.TextBuffer 有 改变的 信号。您可以对此使用相同的方法,例如。 on_textbuffer_changed 您设置标志,然后在 glib.timeout 您将保存。也许这是更好的方法,包括击键和鼠标事件。
另请注意,此解决方案将在 keystroke/textbuffer 更改 5 秒后保存。要做到这一点,只有在闲置 5 秒后,必须使用计时器,并且每次文本缓冲区更改时重置计时器,以便只有当计时器超过定义的空闲保存时间时,超时功能才会保存( timeout_add_seconds 定时回调的频率必须低于为空闲自动保存计时器选择的频率。