2009年4月23日

[PyQt 教學] Part 7: 聚砂成塔

[PyQt 教學] Part 6: 物件導向的寫法

一路走來,盡係寫些拉雞程式。沒關係,打好基礎後就可以準備擺脫這坨窩囊鳥氣啦 =3=

這次寫個線上字典查閱程式。是的,它會跑去讀取 Yahoo! 奇摩字典 並顯示查詢的單字結果...... 用一種異常偷吃步的方法 =.=

( code )

[PyQt 教學] Part 6: 物件導向的寫法

[PyQt 教學] Part 5: Signals & Slots mechanism

到目前為止,我們都是用 procedure-oriented 的方式寫 PyQt code。對於本就是 object-oriented 的 GUI framework 來說,物件導向寫法貌似更加自然,是必需要學會的。


將先前那個 connect 的例子改成 class 型式:( code )

[PyQt 教學] Part 5: Signals & Slots mechanism

[PyQt 教學] Part 4: Layout Management

回到先前的範例,一個簡單的 PushButton

#!/usr/bin/env python

import sys
from PyQt4.QtGui import *

app = QApplication(sys.argv)

button = QPushButton("&Quit")
button.show()

app.exec_()


事與願違。儘管按鈕上寫著斗大的「Quit」,猛擊幾百遍也是無動於衷。

然而其實當它被按下時,就會發出「我被按了」的訊號;只是因為沒人接收到,所以這訊號便隨風而逝瞭 QQ


為了讓 widget 間能彼此溝通,Qt 有一套 Signals & Slots 機制。看看官方的廣告:

Signals and slots are used for communication between objects. The signals and slots mechanism is a central feature of Qt and probably the part that differs most from the features provided by other frameworks.


[PyQt 教學] Part 4: Layout Management

[PyQt 教學] Part 3: 起步走

看看 Qt 中精美的 widget 們:Qt Widget Gallery

平常使用作業系統圖形介面時,就已經摸過不少了;而在 Qt 中也可以看到這些老朋友們。從 PushButtonCheckBoxProgressBarSpinBox 乃至精美的 CalendarWidget,應有盡有。認識老朋友的名字,對於日後呼叫會有幫助。

先召喚個 QPushButton 出來:

#!/usr/bin/env python

import sys
from PyQt4.QtGui import *

app = QApplication(sys.argv)

button = QPushButton("H&ello!")
button.resize(200, 75)
button.move(500, 400)
button.setWindowTitle("Hello World")
button.show()

app.exec_()


[PyQt 教學] Part 3: 起步走

[PyQt 教學] Part 2: 建構開發環境

第一個 GUI 程式:

#!/usr/bin/env python

import sys
from PyQt4.QtGui import *

app = QApplication(sys.argv)

widget = QWidget()
widget.show()

app.exec_()

摳起來存成 first.py 後,雙點 or 進 terminal 輸入 python first.py 就可以執行了!( Windows® 下可能得用完整路徑 C:\Python26\python.exe )

2009年4月22日

[PyQt 教學] Part 2: 建構開發環境

[PyQt 教學] Part 1: Introduction

如何建構 PyQt 開發環境呢?先把 runtime library 裝好吧:

  • Windows 用戶:到巨慢速又常掛點的官網下載頁把 Windows installer bundle 載下來灌 ( 記得還要先灌對應版本的 Python )。

  • Linux 用戶:包管理系統搜一下 pyqt 應該就有了。找出來安裝之。

裝了 runtime lib 之後,執行 *.py 程式碼就可以跑 PyQt 程式啦!當前 PyQt 最新版本是 4.4.4,之後的程式碼範例也會以這個版本為主。 更新後的這系列文章以 Python 2.6 + PyQt 4.5 語法為主。

( 這系列教學的所有程式碼:4.4 / 4.5 )


2009年4月19日

[PyQt 教學] Part 1: Introduction

因為我對 PyQt 頗為有愛 ( 以前用它寫過 Money Expenser ),所以打算生一點 PyQt4 的入門文......

( 礙於個人知識與經驗的有限,難以保證所述完全正確;若有發現錯誤,請提出指正。)


對於初學程式設計的人來說,一項很大的挫折,就是只能在黑黑的屏幕印出九九乘法表,一點 fu 也沒有。不精研演算法之類玩意兒的話,還是得寫出可以點來點去的圖形介面 ( Graphical User Interface ),會比較有成就感。

以工學院常教的 C/C++ 來說,standard 內並無包含 GUI 的部份;想寫 GUI,就得借助一些現成 library / framework 的幫助。選擇很多,滿地都是,但其中個人最有愛的是 Qt ( ......也只摸過這個 )。這系列教學文簡單介紹較好寫的 Qt Python binding - PyQt,期能對對這方面有興趣的人們有些幫助。

當然啦!萬丈高樓平地起;若沒先打好一些程設基本功 ( 像是物件導向概念 ) 的話,一路走下去終究還係會躺平在路邊的......


2009年4月15日

[讀書心得] 愛麗絲夢遊仙境

是的,就是那本《Alice's Adventures in Wonderland》中譯版,同場加映《Through the Looking-Glass》。

該怎麼說呢...... 讓我狂冒 WTF 的一本書。

不愧是童話經典,劇情跳 tone 的程度很係驚人,跳很大跳不用錢;任何風馬牛不相及的事都能湊在一起,角色無釐頭、對話也無釐頭,滿坑強者齊心共創不和諧的夢中社會。

2009年4月2日

講座心得

最近學校舉辦一系列講座,邀請了幾位名人來演講。紀錄一下其中最有印象的幾句話:

  • 朱學恆:
    1. 情緒管理?不要生氣。
    2. 莫忘初衷。
  • 蔣 勳:生命如果沒有沉澱一些苦味在底層的話,可能會顯得有點膚淺、輕浮。
  • 詹宏志:婚姻是用長久的理性來彌補當初一時的感性。
  • 嚴長壽:
    1. 我希望這個比賽的獎金別只有一百萬,而能提高到上千萬,請來世界知名的選手;別在同一個場地中跑個幾十圈,而是在花東一帶的美麗風景沿途進行;還能請到知名頻道來拍攝,將台灣好好地宣傳出去。
    2. 當我看到媒體採訪外國訪客「花了多少錢」之類膚淺的問題時,我是非常心痛的。

當然,大師們所論述的東西還有很多啦...... 可惜沒有錄音做筆記,所以記住的所剩不多了。也許再過個幾年,還能記得的真的只剩這一點點。不過聽講過程中確實可以感受到諸位大師的閱歷之豐富...... 信手拈來一堆例子,口若懸河層層闡述核心觀點,很是強大。尤其又以嚴長壽的無雙排比法,最教我嘖嘖稱奇 @3@

另一項大師們讓人崇拜的原因,就是視野的寬廣程度了。在宿舍聽了一整天的計程車喇叭聲,再去洗禮一番,簡直目瞪口呆。或許閱歷與器度是相輔相成的吧,也是偉大人物的共通特質。五體投地 Orz

回顧一番,最喜歡的還是蔣勳那一句。儘管帶些無奈和自我安慰,不過人生大概真的就是這樣吧...... 只能吃苦當吃補囉。未來我還會很需要這句話的。

四個美好的夜晚。很高興不是又在宿舍中虛度了......