计算器Glade3设计界面GTK+实现代码

Linux之GTK系列教程 00、背上行囊1——程序员学习之道 01、背上行囊2——为什么要学习GTK 02、背上行囊3——GUI概述 03、背上行囊4——GTK简介 04、背上行囊5——GTK环境搭建( Linux ) 05、背上行囊6——GTK环境搭建( windows ) 06、踏上旅途1——一个简单的空白窗口 07、踏上旅途2——控件的添加 08、踏上旅途3——布局容器之水平布局 09、踏上旅途 阅读详情

下载地址:点击打开链接(文件下载)


                 这个是我以前学习使用glade3时写的一个小程序,其中界面自然是用glade3设计的(很简陋),功能基本的也都还有,实现代码使用c写的调用了一些GTK+库,注释很详细,这个小程序的代码实现部分是参考一篇文章写的,和那篇文章基本一样,算法个人觉得很好,可惜时间太久不记得是在哪里看的了没法标注出处,在这里请求作者原谅另外感谢作者的优秀的算法。

                  下面奉上代码的部分文件:

glade_counter.c


#include <gtk/gtk.h>
#include <stdlib.h>

   /*创建一个指向GtkWidget类型的指针(创建文本框使用)*/
static GtkWidget *entry;

   /*创建全局变量:名为“fnum”(双精度,第一个输入量);
                     “snum”(双精度,第二个输入量)*/
gdouble fnum = 0;
gdouble snum = 0;

   /*创建全局控制变量:名为“num_count”(整型,控制输入位数);
                          “operator”(整型,控制输入的运算符号);
                          “first_num”(布尔型,控制输入的次数);
                          “have_result”(布尔型,为重新进行计算作好准备)*/
gint     num_count =0;
gint     operator = 0;
gboolean first_num = TRUE;
//gboolean first_num_equal = FALSE;
gboolean have_dot = FALSE; //小数点
gboolean have_result = FALSE;
gchar    number[100];



/*........................................................................ */
//清除函数:ClearReset()
//1:清除屏幕上的内容(TURE);2:初始化变量并清屏(FALSE)

void ClearReset(gboolean clear_only)
        {
            /*初始化number[100]等,分配内存空间*/
            gint i = 0;
            for(i = 0;i<100;i++)
                number[i] = '\0';
            fnum = 0;
            snum = 0;
            operator = 0;
            num_count = 0;
            first_num = TRUE;
            have_dot = FALSE;
            have_result = FALSE;
            //first_num_equal = FALSE;

            /*清除屏幕*/
            if(clear_only = TRUE)
               gtk_entry_set_text(GTK_ENTRY(entry),"0");
            }       



/*---------------------------------------------------------------------------------- */
//按下数字时的回调函数:PressNum()

void PressNum(GtkButton *button,gpointer data)
        {
            /*创建一个指向字符的指针变量:"num"(用来操作输入量)*/
            const gchar *num;             
            int i;
                                 
            /*控制输入数字的位数*/
            if(num_count == 9)
            return;
          
            /*输入位数记数*/
            num_count++;
          
            /*通过button的label获取每次输入的数值(字符串型)*/
            num=gtk_button_get_label(GTK_BUTTON(button));
          
            /*g_strlcat() 可以用来组合每次输入数字(字符串)起到累加作用*/
            i=g_strlcat(number,num,100);

                                
            /*输入第一个数和第二个数的控制开关,strtod()是把字符串转换为gdouble型*/
            if(first_num )
            {
            /*第一次输入*/
            fnum=strtod(number,NULL);

            }         
            else
            {
                    /*第二次输入*/
                    /*防止除法时除数为0*/
                    if(num_count == 1);
                    snum=strtod(number,NULL);
    
                    if(num_count == 1 && operator ==4 && snum == 0)
                    //gtk_entry_set_text(GTK_ENTRY(entry),"ERROR");
                    return;
            }

           if (number[0]=='0' && number[1]!='.' &&num_count>=2 )
            {
                   gint i;
               for (i =0 ; i<100; i++)
                   {   
                      number[i] = number[i+1];
                   }
            }
                  
            /*把输入的数字显示出来*/
            gtk_entry_set_text(GTK_ENTRY(entry),number);

            //g_print("F:%f\n",fnum);
            //g_print("S:%f\n",snum);

        }



/*----------------------------------------------------------------------------------*/
//按下小数点时的回调函数:PressDot()

void PressDot(GtkButton *button,gpointer data)
        {
           gint i;
            /*重复计算的切换开关*/
            if(have_result)
                ClearReset(FALSE);
              
            /*如果小数点在第一位则不显示*/
            if(num_count == 0)
             {
              ClearReset(TRUE);
             return;
             }
            /*把数加上小数点进行显示.have_dot防止输入两次小数点*/
           if(have_dot == FALSE)
                {
                    have_dot = TRUE;
                    i=g_strlcat(number,".",100);
                if(first_num)
                   /*第一个数字输入*/
                  fnum=strtod(number,NULL);
                else
                    {
                       /*第二个数字输入*/
                      snum=strtod(number,NULL);
                       /*把输入的数字显示出来*/
                      gtk_entry_set_text(GTK_ENTRY(entry),number);
                    }
                
                }
        
        }



/*------------------------------------------------------------------------------------*/
//按下清零键时的回调函数:PressClear()

void PressClear(GtkButton *button,gpointer data)
        {
            ClearReset(FALSE);
        }



/*------------------------------------------------------------------------------------*/
//按下运算符时的回调函数:PressOperator()

void PressOperator(GtkButton *button,gpointer data)
        {
            gint i;
            switch(GPOINTER_TO_INT(data))
                        {
                            case 1: operator = 1;//加法
                            break;
                           
                            case 2: operator = 2;//减法
                            break;
                           
                            case 3: operator = 3;//乘法
                            break;
                          
                            case 4: operator = 4;//除法
                            break;
                        }

            // g_print("F:%f\n",fnum);
            // g_print("S:%f\n",snum);

            /*切换输入第二个数*/
            first_num = FALSE;
            num_count = 0;
            have_dot =FALSE;
            for( i = 0;i<100;i++)
               number[i] = '\0';
        }


      
/*-------------------------------------------------------------------------------------*/
//按下等于号时的回调函数:PressEqual()
          
void PressEqual(GtkButton *button,gpointer data)
      {
            gdouble numb;
            gchar *result;
            gchar num[100];
            gint e = 0;
            g_print("F:%f\n",fnum);
            g_print("S:%f\n",snum);
            /*进行运算*/
            switch(operator)
                {
                    case 1: numb = fnum + snum ;
                             break;
                    case 2: numb = fnum - snum;
                             break;
                    case 3: numb = fnum * snum;
                             break;
                    case 4: numb = fnum / snum;
                             break;
               //防一开始什么也不按,就按一个= 会档机的问题
                    default: gtk_entry_set_text(GTK_ENTRY(entry),number);
                             e = 1;
                             break;
               }

           if (e==0)
            {    /*把结果转换成字符串*/
            result = g_ascii_dtostr(num,100,numb);
            fnum = numb;
            //输出结果
            gtk_entry_set_text(GTK_ENTRY(entry),result);  
            have_result=TRUE;
          //first_num_equal = TRUE;
            }
          
         /*  
         result = g_ascii_dtostr(num,100,numb);
         fnum = numb;
         gtk_entry_set_text(GTK_ENTRY(entry),result);
         have_result=TRUE;
         first_num_equal = TRUE;     */

    }


/*-------------------------------------------------------------------------------------*/
//主函数:main()
int main(int argc,char* argv[])
        {
           /*创建指向GtkWidget类型的指针*/
            GtkWidget *window;
            GtkWidget *button;
            GtkWidget *vbox;
            GtkWidget *hbox;
            GtkWidget *table;
            GtkBuilder *builder = NULL;
            /*初始化*/
            gtk_init(&argc,&argv);

            builder=gtk_builder_new();
            gtk_builder_add_from_file(builder,"counter.glade",NULL);
            gtk_builder_connect_signals(builder, NULL);
           // 根据 ID 获取子构件
          window=GTK_WIDGET(gtk_builder_get_object(builder,"window"));
          entry=GTK_ENTRY(gtk_builder_get_object(builder,"entry"));
            gtk_entry_set_text(GTK_ENTRY(entry),"0");
            gtk_editable_set_editable(GTK_EDITABLE(entry),FALSE);
            gtk_widget_set_direction(entry,GTK_TEXT_DIR_RTL);
         // text = GTK_LABEL(gtk_builder_get_object(builder, "label-main"));

button=GTK_BUTTON(gtk_builder_get_object(builder, "button1"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressClear),NULL);
button=GTK_BUTTON(gtk_builder_get_object(builder, "button2"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button3"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button4"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button5"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressOperator),(gpointer)1);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button6"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button7"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button8"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button9"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressOperator),(gpointer)2);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button10"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button11"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button12"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button13"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressOperator),(gpointer)3);

button=GTK_BUTTON(gtk_builder_get_object(builder, "button14"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressNum),NULL);
button=GTK_BUTTON(gtk_builder_get_object(builder, "button15"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressDot),NULL);
button=GTK_BUTTON(gtk_builder_get_object(builder, "button16"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressEqual),NULL);
button=GTK_BUTTON(gtk_builder_get_object(builder, "button17"));
          g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(PressOperator),(gpointer)4);
 
         // 获取到 UI 对象后,GtkBuilder 对象已没有作用,释放了
 
         g_object_unref(G_OBJECT(builder));

                   
            gtk_widget_show_all(window);
            gtk_main();
            return 0;

        }

接下来是界面部分文件:这个是我用vim打开的,这是一个glade3设计的(内容则是XML),保存的格式也是 ".glade",如果要copy代码一定要记住保存为 xxxx.glade样式,且需要在上面文件 glade_counter.c中这句代码 gtk_builder_add_from_file(builder,"counter.glade",NULL);中的文件名与你保存的文件名一致才行,最好是用我的这个文件名。我觉得贴出来直观一点,所以有想运行以下的,把它copy下来保存为counter.glade文件名就行了

文件名:counter.glade


<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="window">
    <signal name="destroy" handler="gtk_main_quit"/>
    <signal name="delete_event" handler="gtk_main_quit"/>
    <child>
      <object class="GtkVBox" id="vbox">
        <property name="visible">True</property>
        <property name="orientation">vertical</property>
        <property name="spacing">2</property>
        <child>
          <object class="GtkHBox" id="hbox">
            <property name="visible">True</property>
            <property name="spacing">10</property>
            <child>
              <object class="GtkButton" id="button1">
                <property name="label" translatable="yes">C</property>
                <property name="width_request">20</property>
                <property name="height_request">20</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkEntry" id="entry">
                <property name="width_request">200</property>
                <property name="height_request">40</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="invisible_char">&#x25CF;</property>
              </object>
              <packing>
                <property name="position">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkTable" id="table">
            <property name="visible">True</property>
            <property name="n_rows">4</property>
            <property name="n_columns">4</property>
            <property name="column_spacing">2</property>
            <property name="row_spacing">2</property>
            <child>
              <object class="GtkButton" id="button2">
                <property name="label" translatable="yes">7</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
            </child>
            <child>
              <object class="GtkButton" id="button3">
                <property name="label" translatable="yes">8</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="right_attach">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button4">
                <property name="label" translatable="yes">9</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">2</property>
                <property name="right_attach">3</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button5">
                <property name="label" translatable="yes">+</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">3</property>
                <property name="right_attach">4</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button6">
                <property name="label" translatable="yes">4</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="top_attach">1</property>
                <property name="bottom_attach">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button7">
                <property name="label" translatable="yes">5</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="right_attach">2</property>
                <property name="top_attach">1</property>
                <property name="bottom_attach">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button8">
                <property name="label" translatable="yes">6</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">2</property>
                <property name="right_attach">3</property>
                <property name="top_attach">1</property>
                <property name="bottom_attach">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button9">
                <property name="label" translatable="yes">_</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">3</property>
                <property name="right_attach">4</property>
                <property name="top_attach">1</property>
                <property name="bottom_attach">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button10">
                <property name="label" translatable="yes">3</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="top_attach">2</property>
                <property name="bottom_attach">3</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button11">
                <property name="label" translatable="yes">2</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="right_attach">2</property>
                <property name="top_attach">2</property>
                <property name="bottom_attach">3</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button12">
                <property name="label" translatable="yes">1</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">2</property>
                <property name="right_attach">3</property>
                <property name="top_attach">2</property>
                <property name="bottom_attach">3</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button13">
                <property name="label" translatable="yes">*</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">3</property>
                <property name="right_attach">4</property>
                <property name="top_attach">2</property>
                <property name="bottom_attach">3</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button14">
                <property name="label" translatable="yes">0</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="top_attach">3</property>
                <property name="bottom_attach">4</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button15">
                <property name="label" translatable="yes">.</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="right_attach">2</property>
                <property name="top_attach">3</property>
                <property name="bottom_attach">4</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button16">
                <property name="label" translatable="yes">=</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">2</property>
                <property name="right_attach">3</property>
                <property name="top_attach">3</property>
                <property name="bottom_attach">4</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button17">
                <property name="label" translatable="yes">/</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="left_attach">3</property>
                <property name="right_attach">4</property>
                <property name="top_attach">3</property>
                <property name="bottom_attach">4</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

下面是makefile:

文件名:makefile

CC = gcc
all:
    $(CC) `pkg-config --cflags --libs gtk+-2.0` -export-dynamic glade_counter.c -o glade_counter
clean:
    rm -f glade_counter

以上是整个程序的3个文件的完整代码:glade_counter.c、counter.glade、makefile,装好GTK+库后,直接make就编译成功了,下面是运行的结果:

这个程序仅仅是希望能够给初学者提供一些参考,如果需要我对文章中某些地方详细解释的话或者不想复制,我会看到评论后第一时间处理打包发给你。

glade3-3.6.7-with-GTK+ Glade是一个相当不错的图形界面设计工具,使用Glade可以使得基于GTK+ Toolkit及GNOME桌面环境的UI开发变得更加快速和便捷。 立即下载

相关推荐

glade3-3.6.7-with-GTK+(windows版本)

安装这个一步就搞定了,再配置一下IDE,直接就可以在windows下开发了。

一、Glade-3安装配置

1 下载源码 下载链接 2 编译 ./configure make sudo make install 3 问题记录 3.1 configure 没有指定编译类型 configure: error: cannot guess build type; you must specify one # 指定类型 ./configure -host=arm-linux -build=arm-linux 3.2 没有连接gmodule-2.0 /usr/bin/ld: glade_3-main.o: undefin

Creationyang的博客 785

GTK+glade3设计的计算器(适用于linux、win)

这是一个界面用glade3设计,代码用c实现的一个功能俱全的计算器。

glade linux,Linux 下gtk+和glade编程及glade2和glade3之间的差异

本文主要讲解linux下采用多线程和libpcap编程,使用glade2和glade3制作界面的不同点:Glade2 和glade3的主要区别是glade2会自动生成makefile等文件,而glade3只是用来生成界面,然后采用libglade和GtkBuilder调用.glade文件,这样的好处是代码和界面完全分开,避免代码的改变又需要重新编译。Glade2 在设计完界面后点击保存,然后联编,...

weixin_39633113的博客 510

glade3 使用说明

glade3资料比较缺少,转载一本,请使用

Glade3-3.6.1

glade3.6.1 直接安装可使用,版本比较新。。。。。。。

GLADE3教程(一)

看本教程请先自觉看点gtk基础。 本教程是基于windows下用code::blocks编写的 glade3 3.6.7下载地址:http://www.bailangcn.tk/up/soft/glade3-3.6.7-with-GTK .rar 打开glade后在 左边顶层标签那里点“窗口” 然后将名称改成window 也可以改标题如图: 并将其保存至E...

烂笔头 4314

Glade是一个相当不错的图形界面设计工具

Glade是一个相当不错的图形界面设计工具,使用Glade可以使得基于GTK+ Toolkit及GNOME桌面环境的UI开发变得更加快速和便捷.zip

学习使用GTK+ 3.使用GtkBuilder、界面设计器Glade和其他GTK+组件

这一部分包括GTK+相关组件的简要介绍,和界面设计器的使用方法。如果内容存在错误,或者方法不适用与你的电脑,请在下方评论区留言给我,谢谢! GTK+的姊妹库 准确地说,GTK+仅指一个界面物件库。为了制作GTK+,一些副产品相继诞生,比如C语言界很有名的的GLib库。这些GTK+的“姊妹库”都是GTK+所依赖的,而且,制作GTK+程序时可能需要直接使用这些库。 GLib:目前最好...

深未来技术 627

Python+Seaborn可视化:双因素方差分析结果这样呈现更专业

本文详细介绍了如何利用Python中的Seaborn和statsmodels库,专业地执行并可视化双因素方差分析结果。通过模拟实验数据,演示了从模型构建、统计检验(包括交互作用分析)到诊断验证的全流程。重点展示了如何使用Seaborn绘制交互效应图、组合分布图及热图,将复杂的统计结果转化为直观、富有洞察力的可视化图表,助力科研论文与商业报告的专业呈现。

weixin_29274969的博客 137

VS Code/TRAE集成Cppcheck并启用MISRA规则

本文探讨了嵌入式开发中Cppcheck工具集成与MISRA规则检查的必要性。详细介绍了安装配置步骤:安装VSCode/TRAE、Cppcheck软件、配置插件参数、安装Python环境,并重点说明了MISRA规则文件的设置方法。通过完整的配置流程,实现了嵌入式开发环境下静态检查与安全标准的落地。

SDFangFang2025的博客 1282

linux gtk 界面设计工具:glade简介

http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80:glade%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E7%AE%80%E4%BB%8B 一.Glade介绍 Glade是一个程序界面设计工具.使用它,你可以很方便的制作出各种界面.并

beckdon的专栏 7291

松材线虫病害智能检测:基于YOLOv8的无人机航拍数据集构建与模型优化

本文探讨了基于YOLOv8的无人机航拍技术在松材线虫病害智能检测中的应用。通过构建高质量巡检数据集和优化模型架构(如RepVit主干网络和跨尺度特征融合模块),显著提升了病害识别准确率。该方案在复杂森林环境中表现出色,将检测效率提高数倍,为林业病害防控提供了高效解决方案。

vulkan6gpu的博客 994

Debian下用Glade开发一个简单的计算器

一.Glade介绍Glade是一个程序界面设计工具.使用它,你可以很方便的制作出各种界面.并且,在程序代码中,不需要对界面进行定义和配置.大大缩短了程序开发周期.Glade将界面信息保存到一个.glade文件中.应用程序通过调用这个.glade文件,即可生成用户界面.Glade设计初衷就是要把 GTK+/GNOME 程序的界面描述从源代码里分离出来,即使用 xxx.glade 文件来描述界

第三只眼的专栏 3095

基于DFT的滤波系列:加窗滤波的 Matlab 实现

在实际应用中,你可以尝试不同类型的窗函数(如汉宁窗、汉明窗等)以及不同的滤波参数来获得所需的滤波效果。此外,还可以进一步了解 DFT 和窗函数的原理,以及其他数字信号处理技术的应用。加窗滤波是一种常用的数字信号处理技术,它通过在频域上应用窗函数来改善信号的频谱特性。我们通过定义输入信号、应用窗函数、进行 DFT 和逆 DFT,实现了滤波过程,并通过绘图进行了可视化。在频域上进行加窗滤波的关键是将窗函数应用于 DFT 的结果。首先,我们需要定义一个输入信号,这里我们使用一个简单的正弦波作为示例。

m0_47037246的博客 462

multisim14.3无法访问数据库...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 4449

编程语言:glade程序设计简介

.Glade介绍 原文地址:http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80:glade%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E7%AE%80%E4%BB%8B Glade是一个程序界面设计工具.使用它,你可以很方便的制作出

1263

链路状态路由协议 OSPF (一)

本章将会学习链路状态路由协议OSPF,理解OSPF的基本概念,工作原理,掌握OSPF配置基本命令。本章重点,OSPF的基本概念,OSPF配置。

yj11290301的博客 3475

C语言也能做界面:踏上GTK+学习之旅

00、背上行囊1——程序员学习之道01、背上行囊2——为什么要学习GTK02、背上行囊3——GUI概述03、背上行囊4——GTK简介04、背上行囊5——GTK环境搭建( Linux )05、背上行囊6——GTK环境搭建( windows )06、踏上旅途1——一个简单的空白窗口07、踏上旅途2——控件的添加08、踏上旅途3——布局容器之水平布局09、踏上旅途4——布局容器之垂直布局10、踏上旅途5...

秋叶原 && Mike || 麦克 6万+

OpenCV计算机视觉实战(3)——计算机图像处理基础

本文全面介绍了计算机视觉和数字图像处理的基础知识。从最基本的像素概念入手,详细讲解了图像在计算机中的表示方式,包括RGB、CMYK等色彩空间的工作原理及其应用场景。还系统分析了常见图像和视频文件格式的特点,梳理了计算机图像处理技术的发展历程,并重点介绍了OpenCV这一强大的开源计算机视觉库的功能与应用领域。

qq_30167691的博客 1740

移位寄存器——用Verilog实现串入串出、串并和并串转换并进行Modelsim仿真

用Verilog实现串并转换 首先我们先要了并串和串并转换的原理 并串转换:先将八位数据暂存于一个八位寄存器器中,然后左移输出到一位输出端口,这里可以通过一个“移位”来实现,相当于实现了移位寄存器的功能。 串并转换:新输入的位值成为原来数据的最低位,将原来数据的最高位舍去,这里可以通过一个简单的“连接符”来实现。 我们这里采用两种方式来进行串并转换 一:lsb优先 Least Significant Bit,最低比特,最低位优先 二:msb优先 Most Significant Bit,最高比特,

H19981118的博客 2万+

Gtk+/Glade 编程(四)布局管理

http://jianjiaosun.blog.163.com/blog/static/136124486201121694316493/By unanao         本文是根据只使用Gtk+的文章http://zetcode.com/tutorials/gtktutorial/gtklayoutmanagement/,将文中的例子使用Glade实现的。    当我们设计我们的GUI应用程序

张同光 (Tongguang Zhang):Hello everyone ! 763

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Linux图形界面编程简单教程(附计算器源代码)

如何在linux下用gtk开发图形界面应用程序 最近爱上了Linux,尤其是在读了我博客转载到一篇文章之后,更加的决定这辈子要和linux做永远的情人。正好博主这学期也学习了Linux操作系统。当然了,在大学里就是随便的教教,我们也在下边随便的打打酱油而已。前天突然心血来潮,何不做一个图形界面的程序来练练手。说做就做,先声明,本人菜鸟,所以这个过程十分的漫长,花了整整一天的时间。首先,就是搭建g

萌萌的It人 www.itmmd.com 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: sd无法挂载及无法安装apk的问题(2)
下一篇: 为Android加入busybox工具
LinuxJoey
博客等级 码龄15年 117粉丝 25原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值