如何使用 C 在短时间内显示 GTK 工具提示?
How to display a GTK tooltip for a short amount of time using C?
我有一个应用程序,在其中单击按钮时,我想显示工具提示,然后在延迟一段时间后将其隐藏。使用 .
实现时间延迟
这是我试过的方法。
#include <gtk/gtk.h>
#include <stdio.h>
#include <time.h>
//
void wait(int unsigned delay)
{
int unsigned end_time = time(0) + delay;
while(time(0) < end_time);
}
void show_tooltip(GtkWidget *widget, gpointer data)
{
GtkWidget **window = data;
printf("Showing tooltip.\n");
gtk_widget_set_tooltip_text(*window, "Clicked!");
wait(5);
// printf("Hiding tooltip.\n");
// gtk_widget_set_has_tooltip(*window, FALSE);
}
int main(void)
{
gtk_init(0, NULL);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget *grid = gtk_grid_new();
gtk_container_add(GTK_CONTAINER(window), grid);
GtkWidget *button = gtk_button_new_with_label("Click Me");
gtk_grid_attach(GTK_GRID(grid), button, 0, 0, 1, 1);
g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(show_tooltip), &window);
gtk_widget_show_all(window);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
}
预期
工具提示应在 Showing tooltip.
出现在终端上后立即显示。
观察
工具提示会在 Showing tooltip.
出现在终端上约 5 秒后显示。
如何确保在打印 Showing tooltip.
的同时显示工具提示? wait(5);
延迟后,我想隐藏工具提示,这样,实际上,工具提示只在很短的时间内可见。
要运行代码,需要GTK3。
sudo apt install libgtk-3-dev
gcc $(pkg-config --libs --cflags gtk+-3.0) main.c
./a.out
GUI 在主循环中绘制。当您调用 sleep()
时,您会冻结它一段时间并且它什么都不做:不重绘,不对用户输入进行反馈等。您必须显示工具提示并安排一个稍后隐藏工具提示的函数。
gboolean hide_tooltip (gpointer data)
{
GtkWidget *widget = data;
gtk_widget_set_has_tooltip (widget, FALSE);
return G_SOURCE_REMOVE; // same as FALSE. otherwise this function will be called again;
}
void show_tooltip (GtkWidget *widget, gpointer data)
{
GtkWidget **window = data;
printf("Showing tooltip.\n");
gtk_widget_set_tooltip_text(*window, "Clicked!");
// Schedule
g_timeout_add (5 * G_TIME_SPAN_MILLISECOND, hide_tooltip, *window);
}
我有一个应用程序,在其中单击按钮时,我想显示工具提示,然后在延迟一段时间后将其隐藏。使用 .
实现时间延迟这是我试过的方法。
#include <gtk/gtk.h>
#include <stdio.h>
#include <time.h>
//
void wait(int unsigned delay)
{
int unsigned end_time = time(0) + delay;
while(time(0) < end_time);
}
void show_tooltip(GtkWidget *widget, gpointer data)
{
GtkWidget **window = data;
printf("Showing tooltip.\n");
gtk_widget_set_tooltip_text(*window, "Clicked!");
wait(5);
// printf("Hiding tooltip.\n");
// gtk_widget_set_has_tooltip(*window, FALSE);
}
int main(void)
{
gtk_init(0, NULL);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget *grid = gtk_grid_new();
gtk_container_add(GTK_CONTAINER(window), grid);
GtkWidget *button = gtk_button_new_with_label("Click Me");
gtk_grid_attach(GTK_GRID(grid), button, 0, 0, 1, 1);
g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(show_tooltip), &window);
gtk_widget_show_all(window);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
}
预期
工具提示应在 Showing tooltip.
出现在终端上后立即显示。
观察
工具提示会在 Showing tooltip.
出现在终端上约 5 秒后显示。
如何确保在打印 Showing tooltip.
的同时显示工具提示? wait(5);
延迟后,我想隐藏工具提示,这样,实际上,工具提示只在很短的时间内可见。
要运行代码,需要GTK3。
sudo apt install libgtk-3-dev
gcc $(pkg-config --libs --cflags gtk+-3.0) main.c
./a.out
GUI 在主循环中绘制。当您调用 sleep()
时,您会冻结它一段时间并且它什么都不做:不重绘,不对用户输入进行反馈等。您必须显示工具提示并安排一个稍后隐藏工具提示的函数。
gboolean hide_tooltip (gpointer data)
{
GtkWidget *widget = data;
gtk_widget_set_has_tooltip (widget, FALSE);
return G_SOURCE_REMOVE; // same as FALSE. otherwise this function will be called again;
}
void show_tooltip (GtkWidget *widget, gpointer data)
{
GtkWidget **window = data;
printf("Showing tooltip.\n");
gtk_widget_set_tooltip_text(*window, "Clicked!");
// Schedule
g_timeout_add (5 * G_TIME_SPAN_MILLISECOND, hide_tooltip, *window);
}