gpt4 book ai didi

user-interface - 当用户停止输入文本时运行函数

转载 作者:行者123 更新时间:2023-12-02 11:21:35 25 4
gpt4 key购买 nike

我正在使用 Haskell 编写一个小型 GUI 应用程序 gtk2hs图书馆,目前正在与 multiline text boxes 合作在其中。我有一个函数,我想在用户更改文本框中的文本时运行该函数,但不希望他们必须单击按钮才能激活它。

此外,因为它是一个相当侵入性和处理密集型的功能(它绘制图形、加载文件等),所以我希望它不会在用户进行任何更改时触发(这可能是我猜是用文本缓冲区中的 bufferChanged 信号完成的?)但是当它们在更改之间停止几秒钟时。

基本上我想知道gtk中是否有类似于range widgets的东西可以将其更新策略设置为 continuous or delayed ,但对于文本框

最佳答案

我对 Haskell 绑定(bind)一无所知,但在纯 C 语言中,通过利用超时很容易实现 GSource .

#include <gtk/gtk.h>

static guint source_id = 0;

static gboolean do_stuff(gpointer user_data)
{
g_print("doing stuff...\n");
return FALSE;
}

static void postpone(void)
{
if (source_id > 0)
g_source_remove(source_id);
source_id = g_timeout_add(1000, do_stuff, NULL);
}

int main(int argc, char **argv)
{
GtkWidget *window, *text_view;
GtkTextBuffer *text_buffer;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "delete-event", G_CALLBACK(gtk_main_quit), NULL);

text_view = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(window), text_view);

text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
g_signal_connect(text_buffer, "changed", G_CALLBACK(postpone), NULL);

gtk_widget_show_all(window);
gtk_main();
return 0;
}

在超时之前退出 TextView 的问题仍然悬而未决。

关于user-interface - 当用户停止输入文本时运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14277838/

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