今年年初的时候加入了iptux的项目,这是个Unix平台下的“飞鸽传书”,虽然一开始只是关心一下,后来给它写了英文版文档、整理了资料,以及对软件界面的一些调整,原来的作者Jally居然把我也设成Project Owner之一了。 据说程序员总有完美主义的倾向,一开始我还没给iptux写多少行代码,Jally就在邮件里面给我大说代码风格代码风格,很郁闷,我很想对他说,我是看你的代码风格那么乱,我才用了“乱风格”的。iptux是使用C++为架构,但是使用基于C的GTK为底层库,C和C++的代码风格是相当不同的,两者一旦混合起来就很难说什么固定风格了(不然人家基于C++的gtkmm要来干吗),不过我也在邮件里面给他挑骨头,几番下来他说代码先交给我来写了。不过两个月下来我也没再怎么给iptux写过多少行代码,上星期iptux的邮件列表突然热闹了一下,想到之前要实现“URL识别并可点击”的功能,就用了一个晚上加入了400多行代码来实现,惊叹的是原来实现鼠标指到一个链接变成手势那样的事情居然那么复杂,不过还好,gtk-demo里面有现成的例子,这400多行代码有不少是从demo里面抄的。 说程序员是完美主义者,且看看Gtk的邮件列表的人,我发邮件去问了一个关于Glib的链表内存释放的问题,却引来一堆回复,后面的人针对有的人表达得的不完美批一通,毫不客气的说,比之前我和jally的邮件有过之余无不及: 我的问题Why there's still ONE element left after g_slist_free () ?已经很完善的解释:我的总结:围观的群众:English Lession
上学期混混沌沌学完《数据库原理》,感觉除了会写几条SQL外没什么收获,至于DBMS的工作原理那些,在《操作系统》完全都有,但教数据库的老师不仅不知道这些联系,一丁点数据库技术前沿的信息也没“透露”过。这个学期的数据库课程设计,我用了一个通宵把基本要求的一个“图书管理系统”做完,用了pygtk作为界面和SQLite作为数据源。不过课程设计是需要搞文档的,一个字,很烦,在Google上面用“数据库课程 学生作品”搜出来了某某学校网页上面的作品,把别人的文档重新组合一下,配上我程序的插图,yeah,完工。 Python虽然在这几年逐渐流行,但是它很历史悠久(1990),一直以简洁和功能强大著称,比如内建对SQLite的支持。SQLite是“文件式数据库系统”,也是近年来发展很快的数据库系统之一,比如Firefox等软件都使用其作为后台数据的管理。SQLite秉承了Python弱类型的特点(呃,其实Python和SQLite没什么关系的,说不上秉承...),创建表的时候那些类型你可以天花龙凤地写,插入数据时更是“没王管”。这个LibiaryManager很可能是大家能在Google上能找到的技术最潮的数据库设计作业了。 为了给老师验收,pygtk在Windows下运行的环境也要设置下,不过还好,在pygtk的FTP上可以找到很新的win32版本(主页上面的链接很旧...),而且pygtk、pygobject、pycairo是单独打包的,缺一无法运行(= .=)。 程序中基本使用Treeview来处理输入和显示,不过后来感觉Treeview对录入数据很不方便。 当然啦,这次作业来自网络,当然还要回到网络中去,不保留任何版权,从这里下载:http://code.google.com/p/ptcoding/source/browse/trunk/LIBManager/
Warning: unable to set property `editable' of type `gboolean' from value of type `gchararray' 做GTK编程的时候,使用TreeView控件时出现这个警告,也就是无法使单元格变为“editable”,原因出在这里: column = gtk.TreeViewColumn(columName[columnNum], renderer, editable=True) 原理解TreeViewColumn的构造函数接受的参数里面可以接受设置Cellrenderer的属性,就直接给editable设True,于是就得到以上警告。 换用add_attribute、set_attributes,均是如此。 Google上搜到同样错误警告,但是他的原因是设错值类型,我明明设了True啊…… 自己观察pygtk-demo的代码和手册,突然发现在构造函数里面给出的属性设置值不应该是直接的值,而是对应Model里面的相应column的值!看手册的描述: Zero or more attribute=column pairs may be added to specify from which tree model column to retrieve the attribute value. 呃,果然是看手册时候大意了,这么多年来还是让英语介词搞的晕头转向。如果在构造函数里面设True这个值,就会被解析为1,去对应Model里面第二栏的类型,是字符串的gchararray,当然对不上了。 解决办法是renderer.set_property("editable", True),调用继承自GObject的set_property方法来设置对象属性。
Page optimized by WP Minify WordPress Plugin