LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 774|回复: 3

为什么我的程序信号连接到一个函数,一运行别的程序就退出

[复制链接]
发表于 2006-2-24 14:52:10 | 显示全部楼层 |阅读模式
程序有两个按钮一个ok一个cencel但是运行buttok_do程序照样退出这是怎么回事
void buttcencel_do(GtkWidget* widget,gpointer data){
   gtk_main_quit();
}
void buttok_do(){
......
  没有退出程序
}
使用gtk_signel_connect连接
发表于 2006-2-24 15:59:32 | 显示全部楼层
建议好好想想怎么描述你的问题先
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 16:29:12 | 显示全部楼层
#include <gtk/gtk.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <locale.h>
#include <libintl.h>
#include <string.h>

extern void r_win_do(GtkWidget* widget,gpointer data );
extern void buttok_do(GtkWidget* widget,gpointer data  );
extern void buttcencel_do(GtkWidget* widget,gpointer data );
extern void buttbrowse_do(GtkWidget* widget,gpointer data );
extern void gtkentry_do(GtkWidget* widget,gpointer data);
extern gint buttok_do2(GtkWidget* widget,GdkEvent *event,gpointer callback_data);
extern GtkWidget*  errwin(void);

GtkWidget *entry1;

GtkWidget* create_win(){
  GtkWidget *window1;
  GtkWidget *vbox1;
  GtkWidget *label2;
  GtkWidget *hbox3;
  GtkWidget *fixed5;
  GtkWidget *label3;
  
  GtkWidget *fixed3;
  GtkWidget *hbox2;
  GtkWidget *fixed2;
  GtkWidget *fixed1;
  GtkWidget *hbuttonbox2;
  GtkWidget *button7;
  GtkWidget *button8;
  GtkWidget *fixed4;

   //窗口创建程序
  window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(window1),GTK_WIN_POS_CENTER);
  gtk_object_set_data (GTK_OBJECT (window1), "window1", window1);
  gtk_window_set_title (GTK_WINDOW (window1), ("window1"));
  gtk_window_set_default_size(GTK_WINDOW(window1),400,200);
  vbox1 = gtk_vbox_new (FALSE, 0);
  gtk_widget_ref (vbox1);
  gtk_object_set_data_full (GTK_OBJECT (window1), "vbox1", vbox1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (vbox1);
  gtk_container_add (GTK_CONTAINER (window1), vbox1);

  label2 = gtk_label_new (("在此输入命令"));
  gtk_widget_ref (label2);
  gtk_object_set_data_full (GTK_OBJECT (window1), "label2", label2,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (label2);
  gtk_box_pack_start (GTK_BOX (vbox1), label2, FALSE, FALSE, 0);

  hbox3 = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (hbox3);
  gtk_object_set_data_full (GTK_OBJECT (window1), "hbox3", hbox3,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (hbox3);
  gtk_box_pack_start (GTK_BOX (vbox1), hbox3, TRUE, TRUE, 0);

  fixed5 = gtk_fixed_new ();
  gtk_widget_ref (fixed5);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed5", fixed5,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed5);
  gtk_box_pack_start (GTK_BOX (hbox3), fixed5, TRUE, TRUE, 0);

  label3 = gtk_label_new (("命令:"));
  gtk_widget_ref (label3);
  gtk_object_set_data_full (GTK_OBJECT (window1), "label3", label3,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (label3);
  gtk_box_pack_start (GTK_BOX (hbox3), label3, FALSE, FALSE, 0);

  entry1 = gtk_entry_new ();
  gtk_widget_ref (entry1);
  gtk_object_set_data_full (GTK_OBJECT (window1), "entry1", entry1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_signal_connect(GTK_OBJECT(entry1),"activate",GTK_SIGNAL_FUNC(buttok_do),NULL);
  //gtk_entry_set_position(GTK_OBJECT(entry1),1);
  gtk_widget_set_events(entry1,GDK_KEY_PRESS_MASK);
  gtk_widget_show (entry1);
  gtk_box_pack_start (GTK_BOX (hbox3), entry1, TRUE, TRUE, 0);
  gtk_widget_set_events (entry1,GDK_ENTER_NOTIFY);

  fixed3 = gtk_fixed_new ();
  gtk_widget_ref (fixed3);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed3", fixed3,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed3);
  gtk_box_pack_start (GTK_BOX (hbox3), fixed3, TRUE, TRUE, 0);

  hbox2 = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (hbox2);
  gtk_object_set_data_full (GTK_OBJECT (window1), "hbox2", hbox2,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (hbox2);
  gtk_box_pack_start (GTK_BOX (vbox1), hbox2, TRUE, TRUE, 0);

  fixed2 = gtk_fixed_new ();
  gtk_widget_ref (fixed2);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed2", fixed2,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed2);
  gtk_box_pack_start (GTK_BOX (hbox2), fixed2, FALSE, FALSE, 0);

  fixed1 = gtk_fixed_new ();
  gtk_widget_ref (fixed1);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed1", fixed1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed1);
  gtk_box_pack_start (GTK_BOX (hbox2), fixed1, TRUE, TRUE, 0);

  hbuttonbox2 = gtk_hbutton_box_new ();
  gtk_widget_ref (hbuttonbox2);
  gtk_object_set_data_full (GTK_OBJECT (window1), "hbuttonbox2", hbuttonbox2,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (hbuttonbox2);
  gtk_box_pack_start (GTK_BOX (hbox2), hbuttonbox2, TRUE, TRUE, 0);

  //button
  button7 = gtk_button_new_with_label (("确定"));
  gtk_widget_ref (button7);
  gtk_object_set_data_full (GTK_OBJECT (window1), "button7", button7,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_signal_connect(GTK_OBJECT(button7),"clicked",GTK_SIGNAL_FUNC(buttok_do),NULL);
  gtk_widget_show (button7);
  gtk_container_add (GTK_CONTAINER (hbuttonbox2), button7);
  GTK_WIDGET_SET_FLAGS (button7, GTK_CAN_DEFAULT);

  //button
  button8 = gtk_button_new_with_label (("取消"));
  gtk_widget_ref (button8);
  gtk_object_set_data_full (GTK_OBJECT (window1), "button8", button8,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_signal_connect(GTK_OBJECT(button7),"clicked",GTK_SIGNAL_FUNC(buttcencel_do),NULL);
  gtk_widget_show (button8);
  gtk_container_add (GTK_CONTAINER (hbuttonbox2), button8);
  GTK_WIDGET_SET_FLAGS (button8, GTK_CAN_DEFAULT);

  fixed4 = gtk_fixed_new ();
  gtk_widget_ref (fixed4);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed4", fixed4,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed4);
  gtk_box_pack_start (GTK_BOX (hbox2), fixed4, TRUE, TRUE, 0);

  return window1;
}


int main(int argc,char*argv[]){
   GtkWidget *window;
  // setlocale(LC_ALL,"");
   gtk_set_locale();
   gtk_init(&argc,&argv);
   window = create_win();

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


void r_win_do(GtkWidget* widget,gpointer data){
   //gtk_main_quit();
}
void buttok_do(GtkWidget* widget,gpointer data){
     int k;

     char *dd=gtk_entry_get_text(GTK_ENTRY(entry1));
     char *ff="./gk.sh";
     //char *des=malloc(sizeof(*dd)+ sizeof(" ") + sizeof(*ff) + 5  );
      char *des=malloc(1000);
     des = strcpy(des,ff);
     des = strcat(des," ");
     des = strcat(des,dd);
     //printf("%c",dd);
     k=system(des);
     free(des);
     if(k==0){
         errwin();
     }
     else
     {
         execlp("sh","sh","-c",gtk_entry_get_text(GTK_ENTRY(entry1)),(char*)0);
         gtk_main_quit();
     }
}

void buttbrowse_do(GtkWidget* widget,gpointer data){
}
void  gtkentry_do(GtkWidget* widget,gpointer data){
   system(gtk_entry_get_text(GTK_ENTRY(widget)));
   //gtk_main_quit();
}
gint buttok_do2(GtkWidget* widget,GdkEvent *event,gpointer callback_data){
   system(gtk_entry_get_text(GTK_ENTRY(widget)));
   //gtk_main_quit();
}
GtkWidget* errwin(void){
   GtkWidget *window1;
  GtkWidget *vbox1;
  GtkWidget *table1;
  GtkWidget *fixed1;
  GtkWidget *fixed2;
  GtkWidget *fixed3;
  GtkWidget *fixed4;
  GtkWidget *label1;
  GtkWidget *fixed5;
  GtkWidget *button1;
  GtkWidget *fixed6;
  GtkWidget *fixed7;
  GtkWidget *fixed8;
  GtkWidget *fixed9;
  GtkWidget *fixed10;
  gtk_set_locale();
  window1 = gtk_window_new (GTK_WINDOW_DIALOG);
  gtk_window_set_position(GTK_WINDOW(window1),GTK_WIN_POS_CENTER);
  gtk_window_set_default_size(GTK_WINDOW(window1),300,150);
  gtk_object_set_data (GTK_OBJECT (window1), "window1", window1);
  gtk_window_set_title (GTK_WINDOW (window1), ("window1"));

  vbox1 = gtk_vbox_new (FALSE, 0);
  gtk_widget_ref (vbox1);
  gtk_object_set_data_full (GTK_OBJECT (window1), "vbox1", vbox1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (vbox1);
  gtk_container_add (GTK_CONTAINER (window1), vbox1);

  table1 = gtk_table_new (4, 3, FALSE);
  gtk_widget_ref (table1);
  gtk_object_set_data_full (GTK_OBJECT (window1), "table1", table1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (table1);
  gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0);

  fixed1 = gtk_fixed_new ();
  gtk_widget_ref (fixed1);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed1", fixed1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed1);
  gtk_table_attach (GTK_TABLE (table1), fixed1, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  fixed2 = gtk_fixed_new ();
  gtk_widget_ref (fixed2);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed2", fixed2,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed2);
  gtk_table_attach (GTK_TABLE (table1), fixed2, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  fixed3 = gtk_fixed_new ();
  gtk_widget_ref (fixed3);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed3", fixed3,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed3);
  gtk_table_attach (GTK_TABLE (table1), fixed3, 2, 3, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  fixed4 = gtk_fixed_new ();
  gtk_widget_ref (fixed4);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed4", fixed4,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed4);
  gtk_table_attach (GTK_TABLE (table1), fixed4, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  label1 = gtk_label_new (("输入的命令错误"));
  gtk_widget_ref (label1);
  gtk_object_set_data_full (GTK_OBJECT (window1), "label1", label1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (label1);
  gtk_table_attach (GTK_TABLE (table1), label1, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_misc_set_alignment (GTK_MISC (label1), 0, 0.5);

  fixed5 = gtk_fixed_new ();
  gtk_widget_ref (fixed5);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed5", fixed5,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed5);
  gtk_table_attach (GTK_TABLE (table1), fixed5, 2, 3, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  //button1 = gtk_button_new_with_label (("??"));
  //gtk_widget_ref (button1);
  //gtk_object_set_data_full (GTK_OBJECT (window1), "button1", button1,
  //                          (GtkDestroyNotify) gtk_widget_unref);
  //gtk_widget_show (button1);
  //gtk_table_attach (GTK_TABLE (table1), button1, 1, 2, 2, 3,
  //                  (GtkAttachOptions) (GTK_FILL),
  //                  (GtkAttachOptions) (0), 0, 0);

  fixed6 = gtk_fixed_new ();
  gtk_widget_ref (fixed6);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed6", fixed6,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed6);
  gtk_table_attach (GTK_TABLE (table1), fixed6, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  fixed7 = gtk_fixed_new ();
  gtk_widget_ref (fixed7);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed7", fixed7,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed7);
  gtk_table_attach (GTK_TABLE (table1), fixed7, 0, 1, 3, 4,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  fixed8 = gtk_fixed_new ();
  gtk_widget_ref (fixed8);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed8", fixed8,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed8);
  gtk_table_attach (GTK_TABLE (table1), fixed8, 1, 2, 3, 4,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  fixed9 = gtk_fixed_new ();
  gtk_widget_ref (fixed9);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed9", fixed9,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed9);
  gtk_table_attach (GTK_TABLE (table1), fixed9, 2, 3, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  fixed10 = gtk_fixed_new ();
  gtk_widget_ref (fixed10);
  gtk_object_set_data_full (GTK_OBJECT (window1), "fixed10", fixed10,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fixed10);
  gtk_table_attach (GTK_TABLE (table1), fixed10, 2, 3, 3, 4,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);
  gtk_widget_show(window1);
  return window1;
}
void buttcencel_do(GtkWidget* widget,gpointer data){
   //gtk_main_quit();   加入 这个地方当单击ok的时候程序也退出就是这样
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 16:33:54 | 显示全部楼层
按照程序的执行,程序单击ok执行一个shell查找命令是否存在如果存在那么运行,退出当前窗口,如果没有找到命令那么显示错误提示窗口,单击取消直接退出,但是如果加上取消函数程序不能出显示任何错误提示都退出,去掉取消一切正常,不知为何
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表