GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 3386|回复: 5

用PyGtk的做图形界面

[复制链接]

该用户从未签到

发表于 2012-5-6 12:07:56 | 显示全部楼层 |阅读模式
基本上用pygtk弄好界面,而主要的函数部分 则用纯C写生成so或dll(linux下用so,win下用dll)链接库,在python里用ctypes调用 用C写的 函数.

为什么这么弄?因为gtk直接用纯C弄界面太烦了。。。而python是一个很好的粘合剂.同时python使用很简单...
如果是linux大多数情况不用装python和pygtk,因为他自带了。
如果是win系统就要下载下面两个:

A.  python下载地址(  http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi  )

B.  pygtk的ALL in ONE包下载地址
(  http://ftp.gnome.org/pub/GNOME/b ... 4.1.win32-py2.7.msi  )

评分

参与人数 1 +5 收起 理由
ACTom + 5 优秀文章

查看全部评分

该用户从未签到

 楼主| 发表于 2012-5-6 12:17:58 | 显示全部楼层
在win下也基本不必要配置环境变量之类的,直接把python和pygtk依次装了,就ok了

该用户从未签到

 楼主| 发表于 2012-5-6 12:35:26 | 显示全部楼层
发个最简单的例子


  1. # coding=gbk
  2. import pygtk
  3. pygtk.require('2.0')
  4. import gtk
  5. import random
  6. greetings = ["Hello World", "Witaj wiecie", u"世界に今日は",u"你好,世界"]
  7. def choose_greeting (greets):
  8.     return greets[random.randint (0, len(greets) - 1)]
  9. def cb_clicked( button,label):
  10.     label.set_text(choose_greeting(greetings))
  11. #下面创建界面对象
  12. window = gtk.Window ()
  13. window.set_default_size(200, 200)
  14. vbox = gtk.VBox ()
  15. button = gtk.Button("Hello World")
  16. label = gtk.Label (choose_greeting (greetings))
  17. #下面开始使用容器布局
  18. window.add(vbox)
  19. vbox.add(label)
  20. vbox.pack_start(button, False, False)
  21. #下面关联 相应事件 与 相应对象的methods
  22. window.connect("delete-event", lambda a,b: gtk.main_quit())
  23. button.connect("clicked", cb_clicked, label)
  24. #下面两句就是显示,和柱塞,每个gtk程序必须有这两句
  25. window.show_all()
  26. gtk.main()
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?马上加入

x

该用户从未签到

 楼主| 发表于 2012-5-6 15:26:04 | 显示全部楼层
用C语言生成一个简单的dll
  1. #include "stdafx.h"
  2.   extern "C" _declspec(dllexport)int sum(int a, int b)
  3.   {
  4.   return a+b;
  5.   }
复制代码
在pygtk中调用这个C函数
  1. # coding=gbk
  2. import pygtk
  3. pygtk.require('2.0')
  4. import gtk
  5. import random
  6. from ctypes import *;
  7. dll=CDLL('dd.dll')
  8. #dll.sum(1,2)
  9. greetings = ["Hello World", "Witaj wiecie", u"世界に今日は",u"你好,世界"]
  10. def choose_greeting (greets):
  11.     return greets[random.randint (0, len(greets) - 1)]
  12. def cb_clicked( button,label):
  13.     label.set_text(choose_greeting(greetings))
  14. def cb2_clicked(button2 ):
  15.     label.set_text(str(dll.sum(2,3)))
  16. window = gtk.Window ()
  17. window.set_default_size(200, 200)
  18. vbox = gtk.VBox ()
  19. button = gtk.Button("Hello World")
  20. label = gtk.Label (choose_greeting (greetings))
  21. button2 = gtk.Button("3+2=")
  22. window.add(vbox)
  23. vbox.add(label)
  24. vbox.pack_start(button, False, False)
  25. vbox.pack_start(button2, False, False)
  26. window.connect("delete-event", lambda a,b: gtk.main_quit())
  27. button.connect("clicked", cb_clicked, label)
  28. button2.connect("clicked", cb2_clicked)
  29. window.show_all()
  30. gtk.main()
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?马上加入

x
  • TA的每日心情
    奋斗
    2016-10-11 09:20
  • 签到天数: 271 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-5-7 13:48:28 | 显示全部楼层
    优秀文章

    该用户从未签到

    发表于 2012-5-9 18:26:30 | 显示全部楼层
    这个真是好东西,不错呀。
    *滑块验证:
    您需要登录后才可以回帖 登录 | 马上加入

    本版积分规则

    申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

    我要啦免费统计

    GMT+8, 2024-5-2 09:36 , Processed in 0.031322 second(s), 8 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表