zjsxwc 发表于 2012-5-6 12:07:56

用PyGtk的做图形界面

基本上用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/binaries/win32/pygtk/2.24/pygtk-all-in-one-2.24.1.win32-py2.7.msi)

zjsxwc 发表于 2012-5-6 12:17:58

在win下也基本不必要配置环境变量之类的,直接把python和pygtk依次装了,就ok了

zjsxwc 发表于 2012-5-6 12:35:26

发个最简单的例子



# coding=gbk
import pygtk
pygtk.require('2.0')
import gtk
import random

greetings = ["Hello World", "Witaj wiecie", u"世界に今日は",u"你好,世界"]
def choose_greeting (greets):
    return greets

def cb_clicked( button,label):
    label.set_text(choose_greeting(greetings))

#下面创建界面对象
window = gtk.Window ()
window.set_default_size(200, 200)
vbox = gtk.VBox ()
button = gtk.Button("Hello World")
label = gtk.Label (choose_greeting (greetings))

#下面开始使用容器布局
window.add(vbox)
vbox.add(label)
vbox.pack_start(button, False, False)

#下面关联 相应事件 与 相应对象的methods
window.connect("delete-event", lambda a,b: gtk.main_quit())
button.connect("clicked", cb_clicked, label)


#下面两句就是显示,和柱塞,每个gtk程序必须有这两句
window.show_all()
gtk.main()

zjsxwc 发表于 2012-5-6 15:26:04

用C语言生成一个简单的dll
#include "stdafx.h"

extern "C" _declspec(dllexport)int sum(int a, int b)
{
return a+b;
}在pygtk中调用这个C函数
# coding=gbk
import pygtk
pygtk.require('2.0')
import gtk
import random
from ctypes import *;
dll=CDLL('dd.dll')
#dll.sum(1,2)

greetings = ["Hello World", "Witaj wiecie", u"世界に今日は",u"你好,世界"]
def choose_greeting (greets):
    return greets

def cb_clicked( button,label):
    label.set_text(choose_greeting(greetings))

def cb2_clicked(button2 ):
    label.set_text(str(dll.sum(2,3)))



window = gtk.Window ()
window.set_default_size(200, 200)
vbox = gtk.VBox ()
button = gtk.Button("Hello World")
label = gtk.Label (choose_greeting (greetings))
button2 = gtk.Button("3+2=")

window.add(vbox)
vbox.add(label)
vbox.pack_start(button, False, False)
vbox.pack_start(button2, False, False)

window.connect("delete-event", lambda a,b: gtk.main_quit())
button.connect("clicked", cb_clicked, label)
button2.connect("clicked", cb2_clicked)

window.show_all()
gtk.main()


ACTom 发表于 2012-5-7 13:48:28

优秀文章

lodestar51 发表于 2012-5-9 18:26:30

这个真是好东西,不错呀。
页: [1]
查看完整版本: 用PyGtk的做图形界面