理发店会员卡管理程序的一些解释和预告


理发店会员卡管理程序的一些解释和预告

这个程序已经好久没有更新了。原因是比较复杂的。其中最主要的是私本打算学PyQt,0.5版以后全面转向图形化。私不记得自己有没有作出承诺(如果有的话就跟Gnome一样悲剧了),不过最初就是这样想的。其实私现在的水平用PyQt还是能做出一个基本的图形界面的,但如果单纯用弹窗的话界面会显得非常臃肿。所以思想基本上是做出一个类似KDE或者SCIM配置程序那样的界面,左边选择分类,右边的面板自动更改。不过凭借私目前的功力写出来还很困难,同时由于PyQt和Python很多地方有不同,基本上想用上图形的话代码也要重写。

还有一个原因是IdeaPad送修,所以原来的PyQt开发环境和源文件暂时都没有了,继续图形的话也比较难。

//

综上……私决定,继续推出文本化的0.5.0版,继续增加功能。其实有一个一直没发布的0.4.7版,增加了启动加载的东西,稍稍改善了运行时的效率(也增加了启动时间)。目前0.5版的一些想法是密码功能,否则的话知道一个卡号随便就用实在是不太安全。

//

未来的版本什么时候会有图形化的东西呢?也许很快(0.6版),也许要很长时间……

Advertisements

PyQt的折磨……


PyQt的折磨……

写程序,当然不是短时间内能速成的。不过如私这般非科班成员并没有太多的时间和精力投入其中,于是乎只能掌握一些基本的思想和用法。尽管最后的结局多半是学成了半瓶子醋,但好歹还能弄出点东西,万一未来有什么特殊需要,无软件可用的时候还可以自己解决问题。至少私就是抱着这种心态学编程的。

然而当私学PyQt的时候才发现噩梦刚刚开始。官方的文档通常都是所谓的“参考文档”,这种文档有点像字典,意思是当你不知道用什么东西的时候可以翻找一下,所里里面写的东西并不适合初学者读。新手真正需要的是一本“教学文档”,这样的文档好比语文课本。课本里不可能展示出字典里所有的字,但却能教会基本用法。毕竟得先知道语言大概是什么样子才能查字典不是?

Python流行度高,教学自然好找;PyQt则不然,教程相当有限(Qt的倒是多,不过大多是C语言的)。最后好不容易找到了几个还不错的,一个是《PyQt tutorial》,一个是《Rapid GUI Programming with Python and Qt》。不过里面很多地方说的都不非常清楚(比如各种类的函数和方法。顺带一提,函数和方法到底有啥本质区别私到现在还没搞明白),所以还是得查手册。Python的参考手册写得虽然看着不很漂亮,但至少还算明确,还有个搜索框,凡是Python里面有的知无不言(私有时候都嫌他罗嗦)。PyQt的文档就很夸张,很多方法在文档里居然都查不到,就算有也都是一笔带过,或者是随便给个重定向让你去翻。最后看得还是一头雾水……

大概Riverbank的人觉得有经验的程序员一看就该明白,这种简明的写法可以让程序员在程序的海洋里遨游得更快更好。可惜私是纯粹的小白,于是乎只能在PyQt的海洋里勉强扑腾两下,趁着没淹死之前捞上几条有点价值的信息,回去完善自己的几个简单的小程序。

伪·(伪·(伪·通向图形之路……))


就是这东西……理发店会员卡管理程序……

悲惨的图形之路

图片里已经基本上显示出所有功能了,数个星期的学习(玩)成果就是这个,啥功能也没有的图形外壳……orz

昨天想检验一些用法记没记住,就写出来了,结果发现菜单的写法还是快忘光了……

外壳是纯用文本写的,啥功能还没有呢就50行代码了。看来还是把图形和运算分开写比较好,不过很多地方都是交织的,根本不知道怎么样才能分得开……

貌似唯一的进步就是50行代码写完之后仅错了一处。

//

千言万语汇成一句话:悲剧啊……

终于知道这个app.exec_()是啥意思了


私早先就说过,私比较习惯自己尝试、研究,是很看不进参考书的。Python的手册看过一部分,后来发现对私相当晦涩,所以后来也直接找教程,不怎么看官方手册了。

PyQt的手册看得更少。不过那倒不是因为私没心思看,而是面对一套新概念、新名词,英语再好也未必真的看明白,于是找到了《The PyQt4 tutorial》。这本书虽然例子都很简洁,但似乎不像是为图形编程的初学者写的,对于某些基本的东西说得非常模糊,比如这段必加内容:

app=QtGui.QApplication()
==若干代码……==
sys.exit(app.exec_())

第一行是说要建立一个“应用程序”,虽然私没搞明白为什么它不会自动创建,不过好歹算是理解了。但最后一行那个对app进行的exec_()方法却怎么也无法理解。手册里倒是解释了sys.exit(),这本来是Python的方法,还会有人看不明白么?真正让人搞不懂的是那个exec_(),而这本指导对此的作用则只字未提。当时私还对PyQt不熟悉,那么多的类那么多的函数与方法,连手册都无从查起,只能照葫芦画瓢写。

后来终于是琢磨明白了。这个app不是什么内置变量,而是代码第一行里面人为定义的一个QApplication的实例,也就是说“app”这个名字是随便起的。那么app.exec_()就该是QApplication的方法,于是乎去查手册。原来这个exec_()方法的作用是“进入程序的主循环直到exit()被调用”,说白了就是让这个程序运行。

在这方面PyQt和Python有个很大的不同。虽然Python的一切也需要调用才能生效,但是一旦被调用就会立即有反应。PyQt则是类和对象的层层嵌套,需要你逐层调用。私以前一直以为读过“show()”这个方法之后就会有窗口显示在屏幕上,其实真正让窗口显示出来的并不是这一句,这一句其实是个界定窗口在何时弹出的“声明”,解释器读取到这里,Application还没有启动,只是确定了一旦启动,应该在“这个时候”弹出这个窗口。真正让整个程序运转的是“sys.exit(app.exec_())”里面嵌套的这个“app.exec_()”,而正是因为这个嵌套,让私一直误以为这个app.exec_()是一个跟退出“直接相关”(当然它们确实也相关)的方法,以至于百思不得其解。

说到底还是自己学艺不精。看来以后还是要多看手册,光凭教程和自己的一点理解是远远不够的。

有点想放弃纯代码绘制图形,改用QtDesigner……


这几天学了学PyQt,终于把绘制窗口按钮什么的搞清楚了(真艰难啊,三天看10页书,当然私承认自己常偷懒……)。得出的结论是:果然还是有IDE舒服一点。随便画一画就有一个华丽的界面,随便点几下鼠标就可以添加信号和槽的关联。不用在类和对象中绕来绕去不知怎么写好,不用担心哪里敲错一个字母画不出窗口找半天都不知道错误在哪……

不过用IDE的话Vim又用不了了。私好不容易把Vim基本操作学会了,刚觉得效率高一点的说。

好似又到了那个古老的轮回,这俨然就是“GUI、CLI困境”的升级版……

紫外灾变……

PyQt,真的挺难的……


大概由于PC相关的内容只是私的副业,私在编程方面的学习上属于典型的“东一榔头西一棒子”型。小时候在同学家看到VB的书,看了看,觉得挺神秘;中学的计算机课上又学了点VB,结果连在文本状态下绘制窗体都不会;高中讲Scilab(并且版本相当古老),又研究了一阵子,除了会解决算术问题(注意不是“数学问题”)以外一无能力;之后又开始自学(自玩)Python,标准库怎么用都记不清楚,eval和exec还经常搞混,写十行代码能出两三个错。然而私还是觉得编程这东西挺好玩,还是觉得自己的想法在机器上实现很有成就感。

在学Python之前私是有很严重图形界面癖的(原因大概和很多人恰巧相反,我不知道轻点几下鼠标或轻敲几下键盘能解决的问题为什么要用复杂冗长的命令),当初就因为Java图形化问题比较多(看看OpenOffice在Linux下,尤其是在KDE下的表现就知道了)才放弃了这个现在看来挺有前途的语言。本来打算Python学个大概就去转投图形(大概大多数语言想要语法和图形同时学都是不太现实的),但现在Python确实学了个大概,图形化却还是异常艰难。

大概(我只是说大概)大多数语言的图形化都是差不多的,绘制窗体添加部件写入脚本云云。CS Slayer大神(谜之音:“大神个p!”)建议私用PyQt,于是就用了。道理上果然还是这些,但真正学起来却相当痛苦。引用的库中有很多函数和方法,不写肯定是没法运行的,但照葫芦画瓢写进去了又仍然一知半解,没法把它们的意思真正摸透。教程上讲得很模糊,于是去看参考手册,结果发现还是不明白,即使把每个词都查一遍字典把每个意思代入句子还是没办法理解。后来私也懒得逐个单词去查了,于是每句话都读个一知半解。

句子一知半解其实无所谓,但代码是无论如何都不能不明白。不然的话忘得太快,即使硬记记住了也不知道怎么用。于是只能一遍一遍地看代码,最后还是搞不清楚我从来没有定义过的方法是从哪个库里面继承来的。

接着看吧,大概会有些渐与顿悟之类的东西。会有吗?大概,大概……