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