09-10-10
来源:http://blog.chinaunix.net/u/15586/showart.php?id=453858
Python最大的特点就在于她的快速开发功能。作为一种胶水型语言,python几乎可以渗透在我们编程过程中的各个领域。这里我简单介绍一下用python进行gui开发的一些选择。
1.Tkinter
Tkinter 似乎是与tcl语言同时发展起来的一种界面库。tkinter是python的配备的标准gui库,也是opensource的产物。Tkinter可用于windows/linux/unix/macintosh操作系统,而且显示风格是本地化的。Tkinter用起来非常简单,python自带的 IDLE就是采用它写的。除此外,tkinter的扩展集pmw和Tix功能上都要相对它强大,但tkinter却是最基本的。我认为,在用python 做gui开发,tkinter是最基本的知识,所以这个环节是必须要学习的。你或许在以后的开发中并不常用tkinter,但是一些小型的应用上面,他还是很有用的,而且开发速度也很快。
2.WxPython
WxWidgets应该算是近几年了比较流行的GUI跨平台开发技术了。 wxWidgets有不同的版本应用,有c++的,也有basic的,现在在python上面也有较好的移植。wxpython的功能上面要强于 tkinter,她提供了超过200个类,面向对象的编程风格,设计的框架类似于MFC。对于大型GUI应用上面,wxPython还是具有很强的优势的。boa constructor可以帮助我们快速可视地构建wxwidgets界面。
3.PyQT
Qt同样是一种开源的GUI库,Qt的类库大约在300多个,函数大约在5700多个。Qt同样适合于大型应用,由它自带的qt designer可以让我们轻松来构建界面元素。
4.pyGtk
Gtk是linux下Gnome的核心开发库了。功能上面非常齐全。值得说明的是,在windows平台下gtk的显示风格并不是特别本地化。不过他带的glade的界面设计器还是可以帮你省不少事的。
阅读全文 »
09-09-01
前言:
今天看了下FleaPHP中的多语言支持(I18N)的实现,感觉不是很好,它只是将语言包以数组的形式写入一个PHP文件中,然后使用全局变量定义一个当前语言及支持语言的数组,再通过构造函数将当前语言包载入后使用它们.
之所以说这种方式不太好,是因为PHP本身就支持I18N(gettext模块),既然本身已经支持再以PHP方式来实现就显得有些浪费了.
以下是PHP实现I18N的代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| < ?php
// I18N 程序范例开始
$package="hello"; // 定义要用的mo文件名称
$locale="zh_CN"; // 指定要用的语系,如:en_US、zh_CN、zh_TW
//putenv('LANG=$locale'); // 网上找到的示例代码中犯了一个低级错误,无语~!
putenv("LANG=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain($package, './locale');
textdomain($package);
// The .mo file searched is:
// ./locale/zh_CN/LC_MESSAGES/hello.mo
echo _("Hello World!");
?> |
阅读全文 »
08-11-27
原文:http://hi.baidu.com/thinkinginlamp/blog/item/1ebc2e730600891b8601b049.html
作者:老王
所谓“Javascript堵塞问题”,指的是浏览器在下载javascript文件的时候,会堵塞其他下载进程,并且多个javascript文件之间,只能一个一个下载,不能并行下载。浏览器之所以要这么干,是因为javascript里可能会有一些涉及页面渲染的操作,比如document.write,所以要先把他们加载完,以免影响用户体验。为了规避上述弊端,YSlow建议如果有多个javascript文件,并且这些文件里没有类似document.write等页面渲染的操作,那么应该尽可能把他们合并成一个文件,并放到页面的尾部。不过很多时候,合并javascript文件是个浩大的工程,不仅破坏了模块化结构,而且还可能会给代码维护带来不必要的麻烦,今天说说另一个方法,以期避免对现有代码的大规模修改。
先做两个javascript文件,他们是a.php,b.php,之所以用php文件是因为我只会这个,内容如下:
<?php sleep(1); ?>
可以看到a.php和b.php的内容是一样的,其中之所以sleep一秒钟,是为了让演示的效果更明显。
现在让我们来做一个页面(x.htm),看看javascript堵塞问题是如何产生的:
阅读全文 »
08-11-13
Google 图表 API 使您可以动态生成图表。要查看图表 API 的运行情况,请打开浏览器窗口,并将以下网址复制到其中:
http://chart.apis.google.com/chart?cht=p3&chd=t:70,30&chs=250×100&chl=Google|Baidu

简介
Google 图表 API 会返回一幅 PNG 格式的图片来响应一个网址。可以生成多种类型的图片,例如折线图、条形图和饼图。您可以为每种图片类型指定属性,例如大小、颜色和标签。
通过将网址嵌入 <img> 标签内,您可以将图表 API 图片包括在网页中。当网页在浏览器中显示时,图表 API 会呈现该网页中的这幅图片。
本文档中的所有图片均是使用图表 API 生成的。要查看图片的网址,请执行以下操作:
- 如果您使用的是 Firefox,请单击鼠标右键,然后选择“View image”或“Properties”。
- 如果您使用的是 Internet Explorer,请单击鼠标右键,然后选择“Properties”。
本文档说明了所需的图表 API 网址格式和可用参数。 阅读全文 »
08-10-26
Php5中类的保留方法-魔法方法列表如下:
1, __contruct(): 创建类的一个新实例时调用
2, __destory(): 类的一个实例从内存中删除时调用,调用unset()撤销实例或脚本运行结束时调用
3, __autoload(): 第一次引用一个类时调用(例如,调用类构造函数,调用类的某个静态方法,等等)
4, __clone(): 使用clone关键字创建一个对象的副本时调用
5, __get()和__set():试图获取或设置对象未定义的一个属性时调用。__get()有一个表示属性名的参数;__set()取两个参数:想要设置的属性名以及想要指定的属性值
6, __call: 调用未定义方法时调用。它取两个参数:拨用的方法名以及一个数组,其中包含传递给该方法的所有值
7,__sleep()和__wakeup:__sleep()在试图调用serialize()串行化一个对象时调用。例如,如果你在保存一个对象之前需要先关闭该对象所用的数据库连接,或者如果你只想保存对象的部分属性,这就很有用。这个方法要返回一个数组,其中包含所要串行化的变量的名称。调用unserialize()对对象逆串行化时会自动调用__wakeup,可以重建数据库连接,或者以所需的其他方式重新初始化对象
8, __toString(): 需要对象的字符串表示时会调用这个方法
08-10-23
单件模式(Singleton Pattern)是最知名的几个设计模式之一。这个设计模式要解决的问题是通过一个统一的对象来解决应用中的集中操作,比如一个日志对象。在这种情况下,我们需要在整个业务中仅有这么一个对象实例存在,并且所有的应用脚本都可以访问它。比如刚才提到的日志对象,我们需要整个应用都能访问这个对象并写入日志文件,并且让这个统一的日志写入机制处理和过滤日志信息,而这个机制的标准是统一的。因此,为了达到我们想到的效果,我们使用单件模式。
如何定义一个单件模式的类呢。常用的方法就是使用一个静态的方式函数(getInstance),并且通过它来返回唯一的单件对象实例。当你第一次访问它的时候,这个方式函数创建一个实例,并且保存为一个私有的静态变量,并把对象实例返回给你。在接下来的使用中,它无需再次生成实例,而是直接吧保存的实例处理变量返回给你。
请看这个例子:
< ?php
class Logger{
static function getInstance()
{
if (self::$instance == null) {
self::$instance = new Logger();
}
return self::$instance;
}
private function __construct()
{
}
private function __clone()
{
}
function Log($str)
{
//Take care of logging
}
static private $instance = Null;
}
Logger::getInstance()->Log(“Checkpoint”);
?>
在这个设计模式中,最基本的东西是Logger:getInstance(),它帮助你在应用的任何一个时间内访问这个日志对象。无论,你是在函数,对象还是全局变量环境中使用。
这个例子里面,大家可以看到constructor和clone两个构造函数都被定义为私有的,也就是说开发工程师不会错误地通过new或者clone来生成一个新的日志实例。因此,getInstance()是唯一能都访问这个单件对象的方式。
08-10-23
Zend Studio For Eclipse 虽然好用,可能我还不是太习惯Eclipse的一些地方
比如它的错误提示,总是搞得我心里发毛,什么代码都还没开始写,只是把Smarty和Fckeditor的库放在项目目录下,就有700多条警告,烦它~~~
自动缩进也是很麻烦,有些情况不会自动缩进。
哎,还是用回用了N年的Zend Studio好了。
上午配置了一下ZS的SVN,因为默认是CVS,使用SVN只需要在首选项->版本控制中将CVS改为SVN就好了。
因为我的SVN版本是1.5,所以ZS自带的SVN就无法使用了,那如何解决?其实也很简单,只需要将SVN的路径设置成自己安装的SVN就可以了。
08-09-26
改进型先根遍历树算法 学习心得
(图一)
1 Food 19
|
+——————————————-+
| |
3 Fruit 12 13 Meat 18
| |
+————————+ +———————–+
| | | |
4 Red 7 8 Yellow 11 14 Beef 15 16 Pork 17
| |
5 Cherry 6 9 Banana 10
数据结构
id
parent_id | 父节点
name | 名称
left_value | 左值
right_value | 右值
阅读全文 »