#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import ctypes
gobject = ctypes.CDLL('/usr/lib/libgobject-2.0.so')
gtk = ctypes.CDLL('/usr/lib/libgtk-x11-2.0.so')
gobject.g_type_init ()
gtk.gtk_init(None, None)
win = gtk.gtk_window_new(0)
gtk.gtk_window_set_title(win, ctypes.c_char_p("Gtk TextView"))
gtk.gtk_window_set_default_size(win, 750, 500)
view = gtk.gtk_text_view_new()
gtk.gtk_container_add(win, view)
gtk.gtk_widget_show_all(win)
gtk.gtk_main()
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import ctypes
gobject = ctypes.CDLL('/usr/lib/libgobject-2.0.so')
gthread = ctypes.CDLL('/usr/lib/libgthread-2.0.so')
gtk = ctypes.CDLL('/usr/lib/libgtk-x11-2.0.so')
webkit = ctypes.CDLL('/usr/lib/libwebkit-1.0.so')
gthread.g_thread_init(None)
gobject.g_type_init()
gtk.gtk_init(None, None)
win = gtk.gtk_window_new(0)
gtk.gtk_window_set_title(win, ctypes.c_char_p("Gtk WebKit"))
gtk.gtk_window_set_default_size(win, 750, 500)
view = webkit.webkit_web_view_new ()
webkit.webkit_web_view_open(view, ctypes.c_char_p("http://www.google.cn/"))
scrolled = gtk.gtk_scrolled_window_new(None, None)
gtk.gtk_container_add(scrolled, view)
gtk.gtk_container_add(win, scrolled)
gtk.gtk_widget_show_all(win)
#gtk.gdk_threads_enter()
gtk.gtk_main()

On 9/12/09, Jiahua Huang <jhuang...@gmail.com> wrote:
> Python3 现在还缺少许多 Python2 里可用的 C 库,如常见的 PyGtk不过既然 Python2.5 以后就自带了 ctypes
--
<url>http://www.python8.org</url>引领你进入python的世界
咭,这正是Pythonic 的胶水能力哪....
不错!这样整,C程序员更加习惯迁移到 Py 中哪...
> 也是比创建专门的 C 库要省事得多
>
--
http://zoomquiet.org 人生苦短? Pythonic!
向靠谱,反脑残! Kaopulity,小白退散! [Kaopulity~= Keep all processes usablity!]
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import ctypes
gobject = ctypes.CDLL('libgobject-2.0.so.0')
glib = ctypes.CDLL('libglib-2.0.so.0')
gtk = ctypes.CDLL('libgtk-x11-2.0.so.0')
gobject.g_type_init ()
gtk.gtk_init(None, None)
win = gtk.gtk_window_new(0)
gtk.gtk_window_set_title(win, ctypes.c_char_p("Gtk TextView"))
gtk.gtk_window_set_icon_name(win, ctypes.c_char_p("gtk-dnd"))
gtk.gtk_window_set_default_size(win, 300, 300)
gtk.gtk_signal_connect_full(win,
ctypes.c_char_p("delete_event"),
gtk.gtk_main_quit,
None, None, None, 0, 0)
view = gtk.gtk_text_view_new()
buffer = gtk.gtk_text_view_get_buffer(view)
text = "Gtk TextView\n Text"
gtk.gtk_text_buffer_set_text(buffer, ctypes.c_char_p(text), len(text))
gtk.gtk_container_add(win, view)
gtk.gtk_widget_show_all(win)
gtk.gtk_main()
void foo(char** bar, struct ClassA* spam);
再者ctypes对于char[]型的处理,有时候用stringbuffer,有时候用c_char*n。总之,大大地麻烦唉。
On 9月12日, 下午12时19分, Jiahua Huang <jhuangjia...@gmail.com> wrote:
> Python3 现在还缺少许多 Python2 里可用的 C 库,如常见的 PyGtk不过既然 Python2.5 以后就自带了 ctypes
> Screenshot-Gtk WebKit.png
> 76K查看下载
--
http://zoomquiet.org 人生苦短? Pythonic!
Free as in Freedom! 哲思社区:http://zeuux.com
On Sep 12, 12:35 pm, Jiahua Huang <jhuangjia...@gmail.com> wrote:
> 大妈满塞~
> 那些抱怨 Py3 缺第三方 C 库的得没话说了~
>
> 再加上 google unladen-swallow 这个狂快的 VM,
> 足以在许多地方无缝掉 C 了~
>
> 2009/9/12 Zoom.Quiet <zoom.qu...@gmail.com>
gtk.py
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import types
import ctypes
_gobject = ctypes.CDLL('libgobject-2.0.so.0')
_glib = ctypes.CDLL('libglib-2.0.so.0')
_gtk = ctypes.CDLL('libgtk-x11-2.0.so.0')
def gtype(gclass, cid):
gobject = type(gclass.__name__, (), dict(gclass.__dict__))
gobject.__init__ = lambda self:None
gobject._cid = cid
return gobject()
def init(args=[]):
return _gtk.gtk_init(None, None)
#return _gtk.gtk_init(len(args), map(ctypes.c_char_p, args))
pass
def main():
_gtk.gtk_main()
pass
def main_quit(*args):
return _gtk.gtk_main_quit()
pass
class GObject(object):
_cid = 0
def connect(self, signal_name, func, *args):
cfunc = ctypes.CFUNCTYPE(ctypes.c_int)(func)
return _gtk.gtk_signal_connect_full(self._cid,
ctypes.c_char_p(signal_name),
cfunc,
None, None, None, 0, 0)
pass
pass
class Object(GObject):
pass
class Widget(Object):
def show(self):
return _gtk.gtk_widget_show(self._cid)
def show_all(self):
return _gtk.gtk_widget_show_all(self._cid)
pass
class Container(Widget):
def add(self, child):
return _gtk.gtk_container_add(self._cid, child._cid)
pass
class Bin(Container):
def get_child(self):
return _gtk.gtk_bin_get_child(self._cid)
pass
class Window(Bin):
def __init__(self, window_type=0):
self._cid = _gtk.gtk_window_new(window_type)
pass
def set_title(self, title):
return _gtk.gtk_window_set_title(self._cid, ctypes.c_char_p(title))
pass
def set_icon_name(self, icon_name):
return _gtk.gtk_window_set_icon_name(self._cid, ctypes.c_char_p(icon_name))
pass
def set_default_size(self, width, height):
return _gtk.gtk_window_set_default_size(self._cid, width, height)
pass
pass
class TextBuffer(GObject):
def __init__(self, table=None):
_gtk.gtk_text_buffer_new()
pass
def set_text(self, text):
return _gtk.gtk_text_buffer_set_text(
self._cid,
ctypes.c_char_p(text),
len(text))
pass
pass
class TextView(Container):
def __init__(self, buffer=None):
self._cid = _gtk.gtk_text_view_new()
pass
def get_buffer(self):
cid = _gtk.gtk_text_view_get_buffer(self._cid)
buffer = gtype(TextBuffer, cid)
return buffer
pass
pass
#!/usr/bin/python3 # -*- coding: UTF-8 -*-
import gtk
def main():
gtk.init()
# 创建一个窗口对象win = gtk.Window()
# 设置标题等属性win.set_title("Gtk Window")
win.set_default_size(300, 300)
win.set_icon_name("gtk-dnd")
# 创建一个 文本框对象,并弄点文字view = gtk.TextView()
buffer = view.get_buffer()
buffer.set_text("Gtk TextView\n Text")
# 将 文本框 弄到 窗口里win.add(view)
def on_quit(widget=None):
gtk.main_quit()
pass
# 搞个窗口关闭事件win.connect("delete_event", on_quit)
# 显示窗口(及子部件)win.show_all()
# 启动主循环gtk.main()
pass
if __name__=="__main__":
main()
pass