我已經找遍了所有的地方。要麼我看起來不夠努力,要麼就是缺乏C和GTK +的知識。我正在製作一個類似於按Alt + F2時調用的程序的程序。這僅僅是爲了學習體驗。我做了一個叫做「按鈕」的按鈕,在其中輸入要運行的程序後點擊它。我一整天都在嘗試編程按鈕,以便在按下「回車鍵」時也能正常工作。這是我的程序的一部分,負責調用分配小部件的操作。如何將「輸入密鑰」合併到按鈕按下事件
#include <stdio.h>
#include <string.h>
#include <gtk/gtk.h>
static GtkWidget *entry;
static gboolean kill_window(GtkWidget *widget, GdkEvent *event, gpointer data)
{
gtk_main_quit();
return FALSE;
}
static void button_press(GtkWidget *widget, gpointer data)
{
const char *text = gtk_entry_get_text(GTK_ENTRY(entry));
//system("cd" text);
//printf("%s\n", text);
const char *text2 = "&";
char *concatenation;
concatenation = malloc(strlen(text)+2);
strcpy(concatenation, text);
strcat(concatenation, text2);
system(concatenation);
gtk_main_quit();
}
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *button;
GtkWidget *button1;
GtkWidget *hbox;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
button = gtk_button_new_with_label("Run");
button1 = gtk_button_new_with_label("Cancel");
entry = gtk_entry_new();
hbox = gtk_vbox_new(FALSE, 2);
gtk_window_set_title(GTK_WINDOW(window), "Run");
g_signal_connect(window, "delete_event", G_CALLBACK(kill_window), NULL)
g_signal_connect(button, "clicked", G_CALLBACK(button_press), NULL);
g_signal_connect(button1, "clicked", G_CALLBACK(kill_window), NULL);
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 100);
gtk_window_set_decorated(GTK_WINDOW(window), TRUE);
gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 2);
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 2);
gtk_box_pack_start(GTK_BOX(hbox), button1, FALSE, FALSE, 2);
gtk_container_add(GTK_CONTAINER(window), hbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
所有我現在需要的是讓「按鈕」,按「回車鍵」的時候被調用。 (對不起,如果我聽起來多餘)
嘗試添加'g_signal_connect(entry,「activate」,G_CALLBACK(button_press),NULL);'(對不起,我現在不能檢查它) – user1759572
甜!有用!只是想知道,但爲什麼我們必須連接到「入門」eather比「按鈕」? – IC2D
當您按Enter鍵時,重點在於輸入。所以入口處理事件。 – user1759572