今天继续做的是昨天那个界面对的优化,直接贴下代码,

 void click_radio(GtkWidget *widget,gpointer *data)
{
3  GtkWidget *dialog;
  GtkWidget *box;
5  GtkWidget *pbox;
6  GtkWidget *bbox;
  GtkWidget *password_label,*password_entry;
8  GtkWidget *button1;
9  GtkWidget *button2; dialog=gtk_dialog_new();
  gtk_window_set_modal((GtkWindow*)dialog,GTK_DIALOG_MODAL); //设置窗口模式,这里设置的是除该窗口之外的其他窗口无法进行操作
gtk_window_set_title(GTK_WINDOW(dialog),"管理员登陆");
g_signal_connect(G_OBJECT(dialog),"destroy",G_CALLBACK(gtk_widget_destroy),NULL);
box=GTK_DIALOG(dialog)->vbox;
ubox=gtk_hbox_new(TRUE,);
pbox=gtk_hbox_new(TRUE,);
bbox=gtk_hbox_new(TRUE,); password_label=gtk_label_new("登陆口令");
password_entry=gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(password_entry),FALSE);
  
   button1=gtk_button_new_with_label("确定");
   button2=gtk_button_new_with_label("取消");
   g_signal_connect(G_OBJECT(button2),"clicked",G_CALLBACK(destroy),dialog);
g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(login),(gpointer*)password_entry); gtk_box_pack_start(GTK_BOX(pbox),password_label,TRUE,FALSE,);
gtk_box_pack_start(GTK_BOX(pbox),password_entry,TRUE,FALSE,);
   gtk_box_pack_start(GTK_BOX(bbox),button1,TRUE,FALSE,);
   gtk_box_pack_start(GTK_BOX(bbox),button2,TRUE,FALSE,);      gtk_box_pack_start(GTK_BOX(box),ubox,FALSE,FALSE,);
gtk_box_pack_start(GTK_BOX(box),pbox,FALSE,FALSE,);
      gtk_box_pack_start(GTK_BOX(box),bbox,FALSE,FALSE,);    gtk_widget_show_all(dialog);
       //gtk_dialog_run(GTK_DIALOG(dialog));
        //gtk_widget_destroy(dialog);

第26和27行调用的函数为

 #define pwd "123456"
void destroy(GtkWidget *widget,gpointer *data) //点击取消按钮的事件
{
gtk_widget_destroy(GTK_WIDGET(data));
}
void login(GtkWidget *widget,gpointer *data) //点击确定按钮的事件
{
GtkWidget *dialog;
GtkEntry *entry = (GtkEntry*) data;
const gchar* password = gtk_entry_get_text( entry );
if(strcmp(password,pwd)==)
{
g_print("yes");
dialog = gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,"登陆成功");
}
else
{g_print("no");
dialog = gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_CLOSE,"用户口令错误");
}
printf("%s\n",password);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
}

这里其实还有一个问题,就是点击确定按钮之后,判断比较如果成功,怎样才能关掉上一个窗口然后打开一个新窗口。其他的有点问题就是调用的这两个函数传递的参数了,还有就是如果click_radio这个函数中加上最后注释掉的那两句运行的时候就会出现一个错误。

(login:9959): Gtk-CRITICAL **: IA__gtk_widget_destroy: assertion 'GTK_IS_WIDGET (widget)' failed
错误信息就是这样,还是要好好看看gtk的函数内容。继续加油!

gtk+学习笔记(五)的更多相关文章

  1. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  2. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  3. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  4. Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  5. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  6. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  7. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  8. python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍

    python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...

  9. Go语言学习笔记五: 条件语句

    Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...

  10. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

随机推荐

  1. logger.debug的用处

    原文:https://www.cnblogs.com/xiangkejin/p/6426761.html logger.debug的用处 简单的说,就是配合log的等级过滤输出 根据你log4j的配置 ...

  2. C++析构函数的自动调用(用于父类指针指向子类对象,内存泄漏问题)

    class A {public:A() { printf("A \n"); }~A() { printf(" ~A \n"); } // 这里不管写不写virt ...

  3. php 中的错误处理机制

    php 里有一套错误处理机制,可以使用 set_error_handler 接管 php 错误处理,也可以使用 trigger_error 函数主动抛出一个错误. set_error_handler( ...

  4. array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。

    <?php $a=array("a"=>"red","b"=>"green"); array_unsh ...

  5. Python面向对象补充以及异常处理

    面向对象相关内容 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstance(o ...

  6. GC的时机

    说到JVM,GC(垃圾回收)是非常重要的机制. 那么首先的问题是: GC在什么时候会发生? GC的触发包括两种情况:1.程序调用System.gc()的时候.2.系统自身决定是否需要GC. 系统进行G ...

  7. java内存溢出xms xmx

    java内存堆栈不够用时我们会寻求java参数-Xms和-Xmx的帮助,网上也有许多前辈给出了例子,但很多人喜欢把-Xms和-Xmx的值设置成一样的,甚至我还见过有吧-Xms设的比-Xmx还要大(-X ...

  8. 2018ICPC赛后总结

    南京: 南京是我们队第一场区域赛,而且和一队二队一起,心里总有种踏实感.之前我们仨在一起讨论过我们打大型比赛出现的问题,晨哥说我们在封榜后总是出不了题,确实是这样,我觉得在之前的比赛中,我们队胜负欲都 ...

  9. Writing your first academic paper

    Writing your first academic paper If you are working in academics (and you are if you are working wi ...

  10. 值得关注的sql-on-hadoop框架

    http://www.infoq.com/cn/news/2014/06/sql-on-hadoop 数据的操作语言是SQL,因此很多工具的开发目标自然就是能够在Hadoop上使用SQL.这些工具有些 ...