gtk当中一些好玩的小例子

之前有人问我,为什么要学习gtk?

原因很简单:

首先, GTK是C语言实现的。我们需要明白,对于C程序员而言,大部分都没有接触过图形界面编程,但是对于以后的发展,我们很有必要了解一下图形界面编程。那么问题又来了,我们是学C语言的,我们可能不太乐意学习面向对象语言(如 C++, Java, C#, Objective-C 等),现在市场上流行的图形界面工具库基本上都是用面向对象语言开发的。
再者,对于我们 C 程序员,我们可能只需了解一下图形界面开发过程,并不一定以后从事图形界面开发。所以,GTK是一个很好的选择。
实际上,用C语言开发的图形库还有一个MiniGUI,在国内医疗设备应用非常广泛,相反,GTK在国内基本上没人用。但是,我们学习到的个别知识,以后未必一定能用上,对于我们而言, 重要的是学习方法。如果觉得 MiniGUI 比 GTK 在国内应用广,就想学习 MiniGUI,那我们是否应该学Android,因为它应用更广。技术是不断的更新的,但是万变不离其宗。
其实,学习 MiniGUI 和 GTK 都差不多。区别在于 MiniGUI 是国内开发, GTK 国外开发的。
学习GTK,我们可以了解到图形界面开发的流程是怎么一个过程,这和 Android 应用开发差不多,假如,有那么一天我们真想做Android开发的工作,我们转过去也容易,因为我们有 C 语言的基础,也有图形界面的基础。

接下来补充几个gtk中好玩的一些效果:

1、gtk窗口移动动画

/* $Id: app12.c $
 Re: animating position of a top-level Gtk window
 jiw July 2011 -- Offered without warranty under GPL v3
 terms per http://www.gnu.org/licenses/gpl.html  */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <gtk/gtk.h>
typedef struct DATA { GTimer *timer; GtkWidget *window; int w, h; }
  DataStruct;

gboolean timerEvent(void *dataset) {
  enum { HalfTime=8, CycTime=2*HalfTime };
  gulong micros;
  DataStruct *data =dataset;
  double t = fabs(fmod (g_timer_elapsed (data->timer, &micros),CycTime));
  int x = (t*data->w)/HalfTime, y = (t*data->h)/HalfTime;
  gtk_window_move (GTK_WINDOW(data->window),t<HalfTime? x : 2*data->w-x, t<HalfTime? y : 2*data->h-y);
  return TRUE; /* Keep timeout running */
}

int main(int argc, char **argv) {
  GtkWidget *vbox, *b;
  GdkScreen *gds;
  DataStruct data;
  data.timer = g_timer_new();
  gtk_init (&argc, &argv);
  data.window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_default_size (GTK_WINDOW(data.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用GtkBox布局的gtk3例子: ```python import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class BoxExample(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Box Example") self.set_border_width(10) # 创建一个纵向的GtkBox vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) # 创建一个横向的GtkBox hbox = Gtk.Box(spacing=6) vbox.pack_start(hbox, True, True, 0) # 添加一个按钮到横向GtkBox中 button = Gtk.Button.new_with_label("Button 1") hbox.pack_start(button, True, True, 0) # 添加第二个按钮到横向GtkBox中 button = Gtk.Button.new_with_label("Button 2") hbox.pack_start(button, True, True, 0) # 创建一个分隔线 separator = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL) vbox.pack_start(separator, True, True, 0) # 添加一个标签到纵向GtkBox中 label = Gtk.Label() label.set_markup("<big>Label</big>") vbox.pack_start(label, True, True, 0) # 添加第二个分隔线 separator = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL) vbox.pack_start(separator, True, True, 0) # 添加一个文本框到纵向GtkBox中 entry = Gtk.Entry() vbox.pack_start(entry, True, True, 0) self.add(vbox) win = BoxExample() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main() ``` 该示例创建了一个包含两个按钮、一个标签和一个文本框的GtkBox。其中,按钮被包含在横向的GtkBox中,而标签和文本框则被包含在纵向的GtkBox中。可以使用`pack_start()`方法将组件添加到GtkBox中,并指定是否让它们填充可用空间以及是否将它们视为可扩展的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值