一路走來,盡係寫些拉雞程式。沒關係,打好基礎後就可以準備擺脫這坨窩囊鳥氣啦 =3=
這次寫個線上字典查閱程式。是的,它會跑去讀取 Yahoo! 奇摩字典 並顯示查詢的單字結果...... 用一種異常偷吃步的方法 =.=
( code )
#!/usr/bin/env python
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
class Dictionary(QWidget):
def __init__(self, parent = None):
super(Dictionary, self).__init__(parent)
self.createLayout()
self.createConnection()
def search(self):
baseUrl = "http://tw.dictionary.yahoo.com/search?ei=UTF-8&p="
word = self.lineEdit.text()
url = QUrl(baseUrl + word)
self.webView.load(url)
def createLayout(self):
self.lineEdit = QLineEdit()
self.goButton = QPushButton("&GO")
h1 = QHBoxLayout()
h1.addWidget(self.lineEdit)
h1.addWidget(self.goButton)
self.webView = QWebView()
self.quitButton = QPushButton("&Quit")
h2 = QHBoxLayout()
h2.addStretch(1)
h2.addWidget(self.quitButton)
layout = QVBoxLayout()
layout.addLayout(h1)
layout.addWidget(self.webView)
layout.addLayout(h2)
self.setLayout(layout)
def createConnection(self):
self.lineEdit.returnPressed.connect(self.search)
self.lineEdit.returnPressed.connect(self.lineEdit.selectAll)
self.goButton.clicked.connect(self.search)
self.goButton.clicked.connect(self.lineEdit.selectAll)
self.quitButton.clicked.connect(self.close)
app = QApplication(sys.argv)
dictionary = Dictionary()
dictionary.show()
app.exec_()
沒錯,60 行不到的程式就可以完成這份單字查找的艱鉅任務了。讓我們稍微瞭解一下:
經觀察可知 Yahoo! 字典的查詢網址都是很規律的字串組合;這個程式就利用這一點,直接載入目標網址。memfunc search() 和 connect 的部份是核心,其它都沒啥特別的。
第 4 行:導入 PyQt4.QtCore 以使用 QUrl class。
第 6 行:導入 PyQt4.QtWebKit 以使用 QWebView class。這個 widget 能用來檢視網頁。
第 16~18 行:調用 search() 後,將 lineEdit 中輸入的文字與 Yahoo! 字典的查詢網址結合成新的 URL。
第 19 行:讓 webView 載入 URL 並顯示。
第 43 + 45 行:在 lineEdit 中輸入 Enter 或點擊 goButton 時調用 search()。
第 44 + 46 行:調用 search() 後保持 lineEdit 中的文字在被選取狀態,以便下次輸入查詢。
其中最 imba 的莫過於第 19 行...... N 個願望一次滿足,高抽象度讓人們得以站在超高的巨人肩膀上吹風 =3=
熟悉整個 framework 之後,寫這樣的程式需要多久呢?其實只要 10 分鐘就可以完成了...... 就和一個 JavaScript booklet 同樣簡單。
基本功練完後,接下來就是自行深入啦!下一篇講查閱 API 的方法 =3=/
→ [PyQt 教學] Part 8: ???
謝謝喔
回覆刪除這是一篇很好很強大的教學
查字典對沒有dreye的人很好用喔
教學寫的真好. 簡短又抓住核心,
回覆刪除感覺上很快就能上手...
期待 下一篇講查閱 API 的方法
這樣就可以開始作工....
好想知道什麼時候出Part 8
回覆刪除抱歉啊... 這爛尾樓都拖那麼久了,不太可能囉
刪除寫文章的熱誠一過 真的就回不來了...
其它要做的就是一直查 Qt 文檔,自動從 C++ 轉換成 Python
然後看安裝 PyQt 時附的 Demo,它的所有範例程式都已經用 PyQt 重寫了
想看書學的話,就是那本《Rapid GUI Programming with Python and Qt》啦
至於我個人的學習重心要轉向 HTML5 + JavaScript 囉~
1.你好!想請教一下除了eric-ide以外,還有沒有其它比較好灌的python ide工具?
回覆刪除我在公司使用centOS 5.8沒有網路可以使用yum安裝相關套件,不知道有沒有比較好安裝的python ide工具?
2.我想請問一下,我想產生一個陣列,內容為a-z,有沒有比較快速的寫法或函數可以用?
以上問題想要麻煩你一下,我是剛學不久的新手,真不好意思.
1. 我沒在用 IDE 耶... 除了 Eric 以外只聽說過 Eclipse + PyDev
刪除2. array = [chr(ascii) for ascii in range(97, 123)]
或是看看 string 這個 module
http://docs.python.org/library/string.html
謝謝!這個對我很有用^__^
刪除看完這一系列,獲益良多,非常感謝!
回覆刪除感謝!很棒的教學
回覆刪除好文章~~~謝謝你!
回覆刪除