@shellex说: 你们——都过来看看我的原推! cc

Posts Tagged ‘gtk’

Python+GTK校内相册下载工具。

仅仅是批量下载很容易的,这种东西嘛,要不要GUI都无所谓的。但是大家知道有很多MM是用WIndows的,而用WIndows的MM是不会用终端的,所以要我写一下GUI也无所谓。
但是由于大菠萝的缘故,我今天…卡卡,才把GUI写了。给…
但是问题就在这里,那就是,我折腾了一个小时也没成功把py2exe做的包运行起来。所以我没有做Windows的安装包咯…真是晕。哪位同学帮我做一下,感激不尽。
如果您使用Windows或者Mac,而且想用这个工具,在某人做出安装包前,请自行安装python和GTK和pyGTK。
如果您使用Linux就自己折腾吧。
源码下载: http://www.box.net/shared/ufsbulheb0
下面分别是Linux下和WIndows下的截图:
这是Linux下的:

这是Windows下的:

下面是代码。但是你可能还是需要去上面下载glade文件。
#!/usr/bin/python
# -*- coding: utf-8 -*-
# by shellex [www.sxnsx.com]
import re
import os
import sys
import gtk
import gtk.glade
import cookielib
import urllib, urllib2
import threading

class xn_photo_downloader(threading.Thread):
def __init__(self):
threading.Thread.__init__(self, name=’downloader’)
self.cookies = cookielib.CookieJar()
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
self.save_path = ‘/home/shellex/Desktop/xnphotosd/d’
self.target_url = ”
self.usr = ”
self.pwd = ”
self.page_cnt = 0
self.pbar = None

def verify(self):
verify_url = ‘http://login.xiaonei.com/Login.do’
verify_data= urllib.urlencode(
{‘email’:self.usr,
‘password’: self.pwd,
‘origURL’:'http://www.xiaonei.com/SysHome.do’
})
self.opener.open(verify_url, verify_data)
print ‘[!]verify finish.’

def go(self, target):
rep = self.opener.open(target)
return rep.read()

def enmu_page_url(self):
reg1 = [...]

在Gtk+中使用流式布局

搞Gtk的大牛们搞什么飞机哦,布局Widget这样的东西,居然被大牛们当成MM一样藏起来拉!就藏在GIMP里面作Custom Widget也不放到GTK作为标准控件。
做一个小玩意时我遇到了一个比较令人苦恼的问题,那就是Gtk+ 的布局管理Widget里面没有那种像Java Flowlayout一样的东西。什么box,什么frame,都不是我想要的。
记得学java布局管理的时候觉得流式布局真白痴,其实也有可用之处啊,最典型的就是GIMP和Dia这样的toolbox啦,就像下面这样,在WIndows的UI系统里面搞这个不是那么容易的吧…
我在Gtk的参考里面找啊找,还是没找到,于是去看Dia的源代码去。
NNNNND!我我居然发现了一个叫GtkWrapBox的Widget。NNND,去google一看,还真有这个玩意,就在Gimp的在线Gtk接口文档中。
可以看到这个叫GtkWrapBox的Widget有两个派生,分别是横向折行和纵向折行;可以看到这个叫GtkWrapBox的Widget还是GtkContainer的派生类;但是最可恶的地方就是——你去看文档里面的Object Hierarchy吧,GtkContainer下绝对没有GtkWrapBox,GtkWrapBox的上层Object绝对是 GtkContainer。NND。
http://developer.gimp.org/api/2.0/app/GtkWrapBox.html#id3166842
http://developer.gimp.org/api/2.0/gtk/GtkContainer.html#id3824858
搞Gtk的大牛们搞什么飞机哦,布局Widget这样的东西,居然被大牛们当成MM一样藏起来拉!就藏在GIMP里面作Custom Widget也不放到GTK作为标准控件。
好了,既然这样就好办了。我去把GtkWrapBox的源码搞过来看一下就好了。源码如下:
$ ls *.c *.h
gtkhwrapbox.c  gtkvwrapbox.c  gtkwrapbox.c
gtkhwrapbox.h  gtkvwrapbox.h  gtkwrapbox.h
下面我来测试一下下啦。我拿GTK 的Hello World改了一段代码,可用!
[main.c]:

#include
#include
#include
#include “gtkhwrapbox.h”
/* This is a callback function. The data arguments are ignored
* in this example. More on callbacks below. */
static void hello( GtkWidget *widget,
[...]

自己做一个cairo clock

由于手头工作的原因,我要接触cairo这个矢量图形库,因为它的免费高效跨平台。如果你现在使用的Firefox 3浏览器,那么恭喜你,Cairo正在为你工作。当然了,GTK和Gnome这样的项目也采用了Cairo。
Cairo:http://www.cairographics.org/
下面的内容你可能需要一些GTK和python的前置知识。还有Cairo本身.

import gtk
import pygtk
import cairo
import math
import time
import gobject

class Clock(gtk.DrawingArea):
def progress_timeout(self, object):
width, height = self.get_parent().size_request()
#Adds region to the update area for window
object.window.invalidate_rect((0, 0, width, height), False)
return True

def __init__(self):
gtk.DrawingArea.__init__(self)
self.connect(“expose_event”, self.expose_cb)
self.timer = gobject.timeout_add (300, self.progress_timeout, self)

def expose_cb(self, widget, event):
self.context = widget.window.cairo_create()
# set a clip region for the expose event
self.context.rectangle(event.area.x, event.area.y,
[...]

Page 1 of 11