gpt4 book ai didi

python - 如何在 gtk.TextBuffer 中等待用户输入暂停?

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:22 25 4
gpt4 key购买 nike

我正在尝试在 pygtk 中编写一个简单的基于 gui 的应用程序,它提供基于文本的标记的“实时”预览。然而,标记处理的计算成本可能相当高,而且运行速度很慢,因此在每次击键时更新预览实际上并不可行。相反,我希望仅在用户输入失败时才运行更新。理想情况下,我希望它在序列中最后一次击键后更新指定的间隔。

我研究了使用threading.Timer,通过取消并重新启动计时器来在每次发出“已更改”信号时调用更新函数。我也尝试过使用 gtk.idle_add(),但我似乎无法让它工作。

下面是一个非常简单的例子 - 有人可以建议实现我所追求的目标的最佳策略吗?最好有一个例子?

import gtk

class example:
def __init__(self):
window = gtk.Window()
window.set_title("example")
window.resize(600,400)
box = gtk.HBox(homogeneous = True, spacing = 2)
buf = gtk.TextBuffer()
buf.connect("changed", self.buf_on_change)
textInput = gtk.TextView(buf)
box.add(textInput)
self.lbl = gtk.Label()
box.add(self.lbl)
window.add(box)
window.connect("destroy", gtk.main_quit)
window.show_all()

def buf_on_change(self, buf):
txt = buf.get_text(*buf.get_bounds())
output = self.renderText(txt)
self.lbl.set_text(output)

def renderText(self, txt):
# perform computation-intensive text-manipulation here
output = txt
return output

if __name__ == '__main__':
example()
gtk.main()

最佳答案

所以我想我找到了使用glib.timeout_add()而不是threading.Timer的解决方案:

import gtk, glib

class example:
def __init__(self):
window = gtk.Window()
window.set_title("example")
window.resize(600,400)
box = gtk.HBox(homogeneous = True, spacing = 2)
self.buf = gtk.TextBuffer()
self.buf.connect("changed", self.buf_on_change)
textInput = gtk.TextView(self.buf)
box.add(textInput)
self.lbl = gtk.Label()
box.add(self.lbl)
window.add(box)
window.connect("destroy", gtk.main_quit)
window.show_all()

self.timer = glib.timeout_add(1000, self.renderText)

def buf_on_change(self, buf):
glib.source_remove(self.timer)
self.timer = glib.timeout_add(1000, self.renderText)


def renderText(self):
txt = self.buf.get_text(*self.buf.get_bounds())
# perform computation-intensive text-manipulation here
self.lbl.set_text(txt)
return False

if __name__ == '__main__':
example()
gtk.main()

这似乎按预期工作,但由于我对 gtk 完全陌生(以及一般的桌面 dui 编程 - 以防万一你无法分辨;))我想保留这个问题,希望有更多经验的人可能会评论实现这种效果的最佳方法。我希望这样可以吗?

关于python - 如何在 gtk.TextBuffer 中等待用户输入暂停?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2170851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com