有關(guān)Python程序大揭秘
但是這個子類的作者需要相當精確地理解 Logger.log_timestamp() 已經(jīng)做了什么;而且除非通過在子類中完全重寫 .log_timestamp() 方法并且不調(diào)用父方法,否則沒有辦法除去消息。
一個非?;镜?PyQt 應(yīng)用程序總有一些樣本代碼,這些代碼在哪里都相同,Tkinter 代碼也是這樣。但是,當我們進一步研究設(shè)置應(yīng)用程序所需的代碼,以及顯示窗口構(gòu)件的代碼時,區(qū)別就顯現(xiàn)出來了。
工具箱是一個使用廣泛的跨平臺 GUI 工具箱,可用于 Windows、Linux、Mac OSX 和許多手持平臺。QT 具有良好結(jié)構(gòu)化(但靈活)的面向?qū)ο蟮慕Y(jié)構(gòu)、清晰的文檔以及直觀的 API。
一般來說,選擇用于應(yīng)用程序的 GUI 工具箱會是一件棘手的事。使用 Python(許多語言也一樣)的程序員可以選擇的 GUI 工具箱種類繁多,而每個工具箱都有各自的優(yōu)缺點。
有些速度比其它工具箱快,有些比較?。挥行┮子诎惭b,有些更適合于跨平臺使用(對于這一點,還要指出,有些支持您需要滿足的特定特性)。當然,各種庫都相應(yīng)具有各種許可證。
對于 Python 程序員而言,缺省的 GUI 選擇是 Tk(通過 Tkinter 綁定)— 其原因顯而易見。Tkinter 和閑置的 IDE 是由 Python 創(chuàng)始人編寫的。它們是作為大多數(shù) Python 分發(fā)版的缺省選擇而出現(xiàn)的。標準 Python 文檔討論了 Tkinter,但沒有涉及任何其它 GUI 綁定。這是故意的!
至少可以這么認為,如果 Tk 和 Tkinter 不是這么糟糕,程序員就沒有理由去尋找替代品了。要誘導(dǎo) Python 程序員放棄缺省選擇,那么工具箱必須提供額外的東西。PyQt 就是這樣一個工具箱。PyQt 所具有的優(yōu)點遠遠超過了 Tkinter(它也有幾個缺點)。Qt 和 PyQt 速度都很快;Qt 和 PyQt 的設(shè)計完全是面向?qū)ο蟮模?/P>
Qt 提供了一個設(shè)計良好的窗口構(gòu)件集合,它比 Tk 所提供的要大得多。就其缺點而言,Qt 的許可證受到的限制比許多工具箱(至少在非 Linux 平臺方面)都多;正確安裝 Qt 和 PyQt 常常會很復(fù)雜;另外,Qt 是一個相當大的庫。PyQt 應(yīng)用程序的用戶將需要設(shè)法完成安裝 Qt 和 PyQt,這使分發(fā)變得很困難。
PyQt 嚴格遵循 Qt 的發(fā)放許可。特別是,它可用于 UNIX/X11 平臺上的 GPL,并可用于 Zaurus 上的 Qt Palmtop Environment 環(huán)境。還存在用于較老的 Qt 版本的免費(free-as-in-free-beer)Windows 軟件包。PyQt 的商業(yè)許可證可用于 Windows。
對于本文而言,PyQt 有一個方面優(yōu)于許多其它工具箱,它值得我們特別關(guān)注。Qt 使用一種稱為信號/插槽(signals/slots)的機制在窗口構(gòu)件(以及其它對象)之間傳遞事件和消息。
這種機制完全不同于包括 Tkinter 在內(nèi)的大多數(shù)工具箱所用的回調(diào)(callback)機制。使用信號/插槽以靈活且可維護的方式控制對象間通信要比使用脆弱的回調(diào)風格容易得多。應(yīng)用程序越大,Qt 的這個優(yōu)勢就越重要。
【編輯推薦】