Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 带GTK的可禁用按钮_User Interface_Gtk_Gnome - Fatal编程技术网

User interface 带GTK的可禁用按钮

User interface 带GTK的可禁用按钮,user-interface,gtk,gnome,User Interface,Gtk,Gnome,大家好,我从gtk开始,我需要在第一次点击后禁用一个按钮 我有两个按钮,第一个按钮使用usb开始数据输入操作,第二个按钮终止该过程。第一次单击后,必须禁用数据感染按钮。我正在使用一个名为gtk_widget_set_sensitive(widget,FALSE | TRUE)的选项。在此之后,按钮总是禁用,但我不明白为什么 这是我的密码: #include <gtk/gtk.h> #include <unistd.h> #include <stdlib.h>

大家好,我从gtk开始,我需要在第一次点击后禁用一个按钮

我有两个按钮,第一个按钮使用usb开始数据输入操作,第二个按钮终止该过程。第一次单击后,必须禁用数据感染按钮。我正在使用一个名为gtk_widget_set_sensitive(widget,FALSE | TRUE)的选项。在此之后,按钮总是禁用,但我不明白为什么

这是我的密码:

#include <gtk/gtk.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <stdio.h>

pid_t pid, pid2;
double a;

static void button_clicked2 (GtkWidget *widget, gpointer data)
{
    pid2=pid+1;
    kill(pid, SIGTERM);
    kill(pid2, SIGTERM);
}



int button_clicked(GtkWidget *widget, gpointer data)
{
  g_print("clicked\n");
  pid = fork();
  //Here we begin te data transmission from our usb port... ( the port must be initialized before we run the code)
  if ( pid == 0 )
{

      execlp("/bin/sh", "/bin/sh", "-c", " cat /dev/cu.usbmodem1421 -9600 > data1.txt", (char *)NULL );

     printf("hello");

    }
    return pid;
}


int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *button;
    GtkWidget *box1;

    gtk_init (&argc, &argv);
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    box1 = gtk_hbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (window), box1);


    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    button = gtk_button_new_with_label("button 1");

    a=g_signal_connect (button, "clicked", G_CALLBACK (button_clicked), (gpointer) "button");
    if(a==9)
    {
     gtk_widget_set_sensitive(widget, FALSE)

    }

    gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);


    button = gtk_button_new_with_label("button 2");

    gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);



    g_signal_connect (button, "clicked", G_CALLBACK (button_clicked2), (gpointer) "button 2");

     gtk_box_pack_start(GTK_BOX (box1), button, TRUE, TRUE, 0);



    gtk_widget_show(button);
    gtk_widget_show(box1);
    gtk_widget_show(window);
    gtk_main();
    return 0;
}
#包括
#包括
#包括
#包括
#包括
pid_t pid,pid 2;
双a;
静态无效按钮2(GtkWidget*小部件,gpointer数据)
{
pid2=pid+1;
kill(pid,SIGTERM);
kill(pid2,SIGTERM);
}
单击int按钮(GtkWidget*小部件,gpointer数据)
{
g_打印(“单击的\n”);
pid=fork();
//在这里,我们从usb端口开始数据传输…(在运行代码之前必须初始化端口)
如果(pid==0)
{
execlp(“/bin/sh”、“/bin/sh”、“-c”、“cat/dev/cu.usbmodem1421-9600>data1.txt”、(char*)NULL);
printf(“你好”);
}
返回pid;
}
int main(int argc,char*argv[])
{
GtkWidget*窗口;
GtkWidget*按钮;
GtkWidget*框1;
gtk_init(&argc,&argv);
窗口=gtk_窗口_新建(gtk_窗口_顶层);
框1=gtk_hbox_新(假,0);
gtk_容器添加(gtk_容器(窗口),第1框);
gtk_容器_设置_边框_宽度(gtk_容器(窗口),10);
按钮=gtk_按钮新按钮,带有标签(“按钮1”);
a=g_信号_连接(按钮“点击”,g_回叫(按钮“点击),“gpointer”按钮);
如果(a==9)
{
gtk_小部件_设置_敏感(小部件,错误)
}
gtk_-box_-pack_启动(gtk_-box(框1),按钮,真,真,0);
gtk_小部件_显示(按钮);
按钮=gtk_按钮新按钮,带有标签(“按钮2”);
gtk_-box_-pack_启动(gtk_-box(框1),按钮,真,真,0);
g_信号连接(按钮“点击”,g_回拨(按钮“点击2),“g指针”按钮2);
gtk_-box_-pack_启动(gtk_-box(框1),按钮,真,真,0);
gtk_小部件_显示(按钮);
gtk_widget_show(框1);
gtk_widget_show(窗口);
gtk_main();
返回0;
}

我相信按钮会在单击之前停止,或者可能我不了解函数调用是如何工作的。

使用
gtk\u widget\u set\u sensitive(按钮,FALSE)
回调中连接到按钮


没有任何意义。阅读。

谢谢德拉纳:)这非常有帮助:)

最后,我修改了GTK教程页面上的示例,并声明了另一个按钮。因此,操作一个单独的按钮和你的观察是正确的答案

#include <gtk/gtk.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <stdio.h>




GtkWidget *window;
GtkWidget *button;
GtkWidget *button2;
GtkWidget *box1;
pid_t pid, pid2;
double a;

static void button_clicked2 (GtkWidget *widget, gpointer data)
{

    g_print ("capture\n");
    g_print ("stop\n");
    pid2=pid+1;
    kill(pid, SIGTERM);
    kill(pid2, SIGTERM);
}

static void button_dissable (GtkWidget *widget, gpointer data)
{

    gtk_widget_set_sensitive(button, FALSE);
}



static void button_clicked(GtkWidget *widget, gpointer data)
{
  g_print("clicked\n");

  pid = fork();
  printf("hello");
  //Here we begin te data transmission from our usb port... ( the port must be initialized before we run the code)
  if ( pid == 0 )
{

      execlp("/bin/sh", "/bin/sh", "-c", " cat /dev/cu.usbmodem1421 -9600 > data1.txt", (char *)NULL );

     printf("hello");

    }
}





int main(int argc, char *argv[])
{


    gtk_init (&argc, &argv);
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    box1 = gtk_hbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (window), box1);


    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    button = gtk_button_new_with_label("button 1");

    g_signal_connect (button, "clicked", G_CALLBACK (button_clicked), (gpointer) "button");
    g_signal_connect_swapped (button, "clicked",G_CALLBACK (button_dissable),button);




    gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);


    button2 = gtk_button_new_with_label("button 2");

    gtk_box_pack_start (GTK_BOX(box1), button2, TRUE, TRUE, 0);



    g_signal_connect (button2, "clicked", G_CALLBACK (button_clicked2), (gpointer) "button 2");

     gtk_box_pack_start(GTK_BOX (box1), button2, TRUE, TRUE, 0);



    gtk_widget_show(button);
    gtk_widget_show(button2);
    gtk_widget_show(box1);
    gtk_widget_show(window);
    gtk_main();
    return 0;
}
#包括
#包括
#包括
#包括
#包括
GtkWidget*窗口;
GtkWidget*按钮;
GtkWidget*按钮2;
GtkWidget*框1;
pid_t pid,pid 2;
双a;
静态无效按钮2(GtkWidget*小部件,gpointer数据)
{
g_打印(“捕获”\n);
g_打印(“停止”\n);
pid2=pid+1;
kill(pid,SIGTERM);
kill(pid2,SIGTERM);
}
静态无效按钮(GtkWidget*小部件,gpointer数据)
{
gtk_控件_设置_敏感(按钮,错误);
}
单击静态无效按钮(GtkWidget*小部件,gpointer数据)
{
g_打印(“单击的\n”);
pid=fork();
printf(“你好”);
//在这里,我们从usb端口开始数据传输…(在运行代码之前必须初始化端口)
如果(pid==0)
{
execlp(“/bin/sh”、“/bin/sh”、“-c”、“cat/dev/cu.usbmodem1421-9600>data1.txt”、(char*)NULL);
printf(“你好”);
}
}
int main(int argc,char*argv[])
{
gtk_init(&argc,&argv);
窗口=gtk_窗口_新建(gtk_窗口_顶层);
框1=gtk_hbox_新(假,0);
gtk_容器添加(gtk_容器(窗口),第1框);
gtk_容器_设置_边框_宽度(gtk_容器(窗口),10);
按钮=gtk_按钮新按钮,带有标签(“按钮1”);
g_信号_连接(按钮“点击”,g_回调(按钮“点击),“gpointer”按钮);
g_信号_连接_交换(按钮“点击”,g_回调(按钮_可禁用),按钮);
gtk_-box_-pack_启动(gtk_-box(框1),按钮,真,真,0);
gtk_小部件_显示(按钮);
button2=gtk_按钮_新按钮_带_标签(“按钮2”);
gtk_-box_-pack_启动(gtk_-box(框1),按钮2,真,真,0);
g_信号连接(按钮2,“点击”,g_回拨(按钮2),“gpointer”按钮2);
gtk_-box_-pack_启动(gtk_-box(框1),按钮2,真,真,0);
gtk_小部件_显示(按钮);
gtk_widget_show(按钮2);
gtk_widget_show(框1);
gtk_widget_show(窗口);
gtk_main();
返回0;
}
#include <gtk/gtk.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <stdio.h>




GtkWidget *window;
GtkWidget *button;
GtkWidget *button2;
GtkWidget *box1;
pid_t pid, pid2;
double a;

static void button_clicked2 (GtkWidget *widget, gpointer data)
{

    g_print ("capture\n");
    g_print ("stop\n");
    pid2=pid+1;
    kill(pid, SIGTERM);
    kill(pid2, SIGTERM);
}

static void button_dissable (GtkWidget *widget, gpointer data)
{

    gtk_widget_set_sensitive(button, FALSE);
}



static void button_clicked(GtkWidget *widget, gpointer data)
{
  g_print("clicked\n");

  pid = fork();
  printf("hello");
  //Here we begin te data transmission from our usb port... ( the port must be initialized before we run the code)
  if ( pid == 0 )
{

      execlp("/bin/sh", "/bin/sh", "-c", " cat /dev/cu.usbmodem1421 -9600 > data1.txt", (char *)NULL );

     printf("hello");

    }
}





int main(int argc, char *argv[])
{


    gtk_init (&argc, &argv);
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    box1 = gtk_hbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (window), box1);


    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    button = gtk_button_new_with_label("button 1");

    g_signal_connect (button, "clicked", G_CALLBACK (button_clicked), (gpointer) "button");
    g_signal_connect_swapped (button, "clicked",G_CALLBACK (button_dissable),button);




    gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);
    gtk_widget_show (button);


    button2 = gtk_button_new_with_label("button 2");

    gtk_box_pack_start (GTK_BOX(box1), button2, TRUE, TRUE, 0);



    g_signal_connect (button2, "clicked", G_CALLBACK (button_clicked2), (gpointer) "button 2");

     gtk_box_pack_start(GTK_BOX (box1), button2, TRUE, TRUE, 0);



    gtk_widget_show(button);
    gtk_widget_show(button2);
    gtk_widget_show(box1);
    gtk_widget_show(window);
    gtk_main();
    return 0;
}