原本由于项目需求在 Linux 下学习过一段时间的 GTK+2.0 图形开发,时隔一段时间,想真正深入学习一下 GTK 。...这次直接从头学习 GTK+-3.0 ,并写下博文便于日后查看,也方便新手入门。...注意采用的是GTK3,上文中大部分是GTK2,注意同样的方式安装GTK3。 首先学习到的便是创建一个空白的窗口。我们创建一个名为 example.c 的源文件。...内容如下 1 #include //每个GTK程序都要包含的头文件,里面申明了很多类型,函数原型等 2 3 static void activate...(window) , "Application"); //设置窗口的标题 10 gtk_window_set_default_size(GTK_WINDOW(window
实践中表明,纯粹利用 gtk 函数来创建 UI 是很繁琐的事,需要编写很多代码。怎样才能快速统一的建立 UI 布局呢? 可喜的是 GTK 提供了一个 GtkBuilder 用于快速创建界面。...( GTK_ENTRY(entry) ); if('\0' !...window = gtk_builder_get_object(builder , "window"); gtk_application_add_window(app , GTK_WINDOW(...button = gtk_builder_get_object(builder , "print_hello"); //设置按钮标签 gtk_button_set_label ( GTK_BUTTON...entry = gtk_builder_get_object(builder , "entry"); button = gtk_builder_get_object(builder
我们创建 example4.c ,内容如下: #include static void print_hello(GtkWidget *button , gpointer data...(app); gtk_window_set_title(GTK_WINDOW(window) , "grid test"); // gtk_window_set_default_size(...gtk_container_set_border_width(GTK_CONTAINER(window) , 20); gtk_container_add(GTK_CONTAINER(window...(gtk_widget_destroy) , window); gtk_grid_attach(GTK_GRID(grid) , button , 1 , 1 , 2 , 1);...gtk_grid_attach(GTK_GRID(grid) , button , 0 , 0 , 1 , 1); 该函数后面四个参数依次代表:第几行,第几列,横向跨度,纵向跨度。
#include static void activate(GtkApplication *app , gpointer data); //从文件中加载一张图片 GdkPixbuf...(app); gtk_window_set_title(GTK_WINDOW(window) , "icon test"); gtk_window_set_default_size(GTK_WINDOW...(window) , 200 , 200); gtk_window_set_position(GTK_WINDOW(window) , GTK_WIN_POS_CENTER); //创建图标控件...icon icon = create_pixbuf("icon.png"); //为窗口设置图标 gtk_window_set_icon(GTK_WINDOW(window) ,...= gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER(button_box) ,
在 GTK3 中增加了一个 GtkApplicaton 类,便于我们处理多窗口程序,同时有了 GtkApplication 我们也更容易创建灵活,易用,界面美观的应用程序。...MyApp myappwindow.c myappwindow.h : 封装的 MyAppWindow 采用这样的设计方式,主函数里面只需要一句话,main.c 内容如下: #include <gtk...() gtk_window_present (GTK_WINDOW(win)); } //处理命令行参数的函数原型 static void my_app_open (GApplication...( GTK_WINDOW(win) ); } //MyApp 类的初始化函数,在这里面即可复写MyApp类继承GtkAppliation类的默认信号处理函数。.../gtk.h> //my_app_get_type() 这些函数,我们虽然没写,但是在注册定义 MyApp 类型的时候根据填写的 my_app 会自动生成。
#include //点击按钮后被调用的函数,用于输出hello,world static void print_msg (GtkWidget *button , gpointer...(app); gtk_window_set_title(GTK_WINDOW(win) , "Button test"); gtk_window_set_default_size(GTK_WINDOW...(win) , 200 , 200); //创建一个盒容器,并设置水平放置 button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL...); //gtk_orientation_horizontal //将盒容器包含进window中 gtk_container_add(GTK_CONTAINER(win) ,...(GTK_CONTAINER(button_box) , button); //显示window及其所有控件 gtk_widget_show_all(win); } int main
背景: 使用Linux系统已经有一段时间了,在管理系统是几乎都是使用命令行与内核交流的,使用虽多的就是Shell,其次就是python。...这两天突然心血来潮,想到了Linux PC端桌面程序,在我个人的熟悉语言中呢,python比较适合,不过、开发Linux桌面我只是玩玩的。...对于开发Linux桌面程序掌握Python的推荐使用Python Gtk3。 ...想玩出一个Linux基本桌面程序( 几乎没有业务逻辑 ),看完下面的( 重点是图片 | UI组件 ),大概就有一个底了! ---- 1、入门Hello word 源码code #!...(), "linked") button = Gtk.Button() button.add(Gtk.Arrow(Gtk.ArrowType.LEFT, Gtk.ShadowType.NONE
下载安装GTK+开发包 For GTK+2: 到 http://www.gtk.org/ 下载GTK+开发包,注意是下载all-in-one bundle,但不要下载2.24.10这个版本,因为该版本的开发包有严重...For GTK+3 gtk官方到目前为止还没有提供GTK+3的开发包和运行时,不过网上的很多大牛都自己编译了GTK+3的开发包, 你可以用google搜索!...环境变量设置主要包括以下几个: 变量名 变量值 GTK_HOME C:\gtk+ INCLUDE C:\gtk+\include LIB C:\gtk+\lib PATH C:\gtk+\bin --...-- 三:配置codeblock For GTK+2: 启动codeblock,点击"File"->"New"->"GTK+ Project"创建一个GTK+2项目....gtk+程序了,如果没有安装GTK+运行时,运行gtk+程序还会报错,这需要将C:\gtk+\bin下的所有DLL文件都复制到项目的bin\Debug目录下,之后就可以运行了。
默认安装的kde桌面使用gtk程序很难看,原因是没装主题 (KDE 4 Theme Integration with GTK Applications) 以下为在Archlinux中KDE美化gtk程序的方法...其它Linux发行版方法雷同。...To better integrate GTK and KDE 4 themes, you can use QtCurve and(or) oxygen-gtk 首先安装 QtCurve 或 oxygen-gtk...#pacman -S qtcurve-gtk2 qtcurve-kde4 gtk-kde4 然后安装 gtk-chtheme #pacman -S gtk-chtheme 打开 gtk-chtheme...更换主题即可 gtk-chtheme
2.3 判断构建是否是指定的构件 “ GTK_IS_构件名”系列宏用来判断构件是否是相应的构件 GTK_IS_BUTTON:用来判断构件是否是按钮 GTK_IS_NOTEBOOK:用来判断构件是否是笔记本构件
问题重现# 在使用 libvirt 管理虚拟机时,有时会用到 virt-manager 提供的图形界面管理虚拟机,查看 vnc 输出等,但是常常会得到如下错误: (virt-manager:25381): Gtk-WARNING...**: 08:55:23.876: cannot open display: Linux 解决# 如果是在 Linux 桌面环境,解决方法很简单,只需要这样连接远程服务器就可以了: ssh -Y username...@ip 使用 -Y 参数实际上是授权了 X11 转发,这样就可以看到来自远端的 gtk 图形窗口了。...参考文献# 轻松解决远程链接的“Gtk-WARNING **: cannot open display;”或“Cannot connect to display;”问题 Ubuntu的中文乱码问题 [完美解决
Linux多线程 多线程 进程内进行资源划分 之前说过页表有用户级页表和内核级页表,现在再来扩展一下。...(并不是线程越多越好,要合适,最好要和CPU的核数相同) 健壮性降低 编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的...编程难度提高 编写与调试一个多线程程序比单线程程序困难得多。...kw=thread 但是这里要注意:任何语言在Linux中要实现多线程,必定要使用pthread库。 C++11中的多线程,本质就是对pthread库的封装。...封装线程接口 这里就用Linux的线程接口来实现C++中的多线程部分功能。
线程是进程内部的一个执行流,在Linux下并没有为线程额外创建数据结构来管理,而是通过只建立PCB来模拟实现的;但是在Windows下为了管理线程又创建了TCB内核数据结构来管理; Linux这种方式一方面是提高了代码的复用率...,一个进程内可能有多个线程,这些线程共享大部分的资源(这些资源都是来自进程的) 当有了多线程的概念以后,PCB就不是进程的专属内核数据结构了;当然CPU也无法区分这个PCB到底代表是进程还是线程...下进程和线程的关系: 之前我们接触的都是单进程多线程或者多个单线程进程 3.线程的数据属性 一个进程内部的线程共享大部分的资源比如:全局数据、堆空间、加载的的动态库、文件描述符表、每种信号的处理方式...2、健壮性(鲁棒性)降低 编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。...4、编程难度提高 编写与调试一个多线程程序比单线程程序困难得多。
Github 链接,https://github.com/FirefoxGraphics/qcms/ GTK-RS Channel问题中的多线程处理 你们好,我是一个Rust初学者,作为我的第一个项目,...我正在开发一个GTK应用程序使用the Rust's GTK binding。
bbox = gtk_button_box_new (GTK_ORIENTATION_VERTICAL); gtk_container_set_border_width (GTK_CONTAINER...(bbox), 5); gtk_container_add (GTK_CONTAINER (frame), bbox); gtk_button_box_set_layout (GTK_BUTTON_BOX...window) { window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_screen (GTK_WINDOW...(GTK_CONTAINER (window), 10); main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add...(GTK_ORIENTATION_VERTICAL, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 10); gtk_container_add
:创建菜单条 gtk_menu_bar_append:往菜单条尾部添加菜单项 gtk_menu_bar_prepend:往菜单条首部添加菜单项 gtk_menu_bar_insert:往菜单条中指定的位置添加菜单项...:创建带有标签的菜单项 gtk_menu_item_new:创建一个菜单分隔条(菜单分隔条实际上是不带标签的菜单项) gtk_menu_item_set_submenu:将一个下拉菜单设置成指定菜单项的子菜单...:创建下拉菜单 gtk_menu_append:往下拉菜单尾部添加菜单项 gtk_menu_prepend:往下拉菜单首部添加菜单项 gtk_menu_insert:往下拉菜单中指定的位置添加菜单项...("文件"); gtk_menu_bar_append(GTK_MENU_BAR(menubar),menuitem); gtk_widget_show(menuitem); =============...(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem),menu); ========================================
还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我见到这样一道面试题: 是否熟悉POSIX多线程编程技术?...(下面的内容摘自Linux下的多线程编程) 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。...我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。...当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。 ...除了以上所说的优点外,不和进程比较,多线程程序作为一种多任务、并发的工作方式,当然有以下的优点: 提高应用程序响应。
领取专属 10元无门槛券
手把手带您无忧上云