我正在使用GTK,当我将文本插入TextView时,它似乎在后台线程中处理它。
如果我将滚动插入到一些计时器中,它可以正常工作 - 但它很慢而且很奇怪。 (首先绘制文本,然后在完成后跳转到底部,对于长文本,它会跳转几次,因为绘图需要很长时间)。
每当我更改Buffer.Text时,控件都会重绘所有行(在循环中逐行追加,这看起来也非常烦人)。
我需要做的是:
例如:
让我们假设您要创建一个文本编辑器,它应该打开大文本文件(10万行),并在打开文件后立即滚动到底部。理想情况下,您打开文件,首先看到的是它的底部。这就是许多文本编辑器中发生的事情。我想用这个gtk的东西来实现这个行为。
我该怎么做?
答案 0 :(得分:1)
这不是基于主循环的工具包中的事件驱动编程的工作原理。使用主循环(如GTK +)的工具包使用事件驱动编程的基本原则是:永远不会阻止主循环。
GTK +不使用单独的线程进行渲染和布局:您执行的每个阻塞操作都会阻止其他操作运行,包括绘图,事件处理和您自己的代码。
使用TextBuffer提供的通知信号,一旦缓冲区更新,您应该滚动到TextView的底部;你还应该从不在紧密循环中插入(长)文本:如果你想逐行插入文本,或者更可能是按块插入文本,你应该将作业细分为更小的部分,并使用空闲回调或超时回调,将在主循环中执行。