Search Google

Friday, February 29, 2008

Python GUI widgets

用Python寫GUI除了用原始的Tkinter module之外還可以利用基於Tkinter之上的Pmw module輕鬆使用進階的gui widgets:
Python PMW module

此外還有可以用來畫graph的blt module:
Python BLT module

Wednesday, February 27, 2008

Wretch Grabber

剛開啟的樣子

取得某帳戶的相簿列表,並顯示所選取的相簿封面

上個星期實驗性寫的script經過幾天的修改之後現在可算是有頭有臉了,借助wget的-m option大大減輕我的workload,因為可以不用費心於處理下載路徑的問題 ^^

TODO:
1. 改為multi-thread
2. 加入帳密功能

Tuesday, February 26, 2008

正面突穿防火牆 in 24 SEC

版權歸24小時反恐任務所有

其實是很簡單設定的,其設定值存在:
HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplicat的List中
機碼名稱通常就是執行檔的路徑,機碼內容則為執行檔路徑加上:*:Enabled:[顯示名稱]
例如:

名稱 --> C:\Python25\pythonw.exe
字串數值資料 --> C:\Python25\pythonw.exe:*:Enabled:pythonw

Sunday, February 24, 2008

Python -- use picture/photo as windows background

Panel approach
Label approach
Canvas.create_image()還沒試成功過

如果用Label的話除了在初始的時候要指定影像之外還要再特別指定一次,例如:


previewImage = ImageTk.PhotoImage(Image.open('preview.GIF'))
self.labelPreview = Tkinter.Label(self.t2Frame['Preview'],
image=previewImage)
self.labelPreview.image=previewImage



另外把side, expand, fill等設定搞清楚對排版有很大的幫助,可以參考Thinking in Tkinter裡面的範例程式,實際跑過他的Demo之後就會很清楚了 :-)

Tuesday, February 19, 2008

Something about importing Python modules & packages

取檔名的時候要避免使用test為開頭,例如:testScript.py。
不然在import的時候可能會出現找不到module,可能因為test本身是關鍵字(default module)?!

import自己的module很簡單,
首先在某個py檔(fibo.py)中編輯幾個functions,然後在另外一個py檔(myScript.py)中import fibo,要使用fibo.py中定義的function只需要寫下fibo.functionName()

import自訂的package也不難,
首先建立一個目錄(myPackage),這個目錄便是package的名稱,於此目錄中必須要有一個名為__init__.py的檔案,現在暫時讓它保持空白。然後在myPackage目錄中新增fibo.py檔案,裡面一樣是我們事先編輯好的functions,要使用的時候我們必須先import myPackage.fibo,呼叫function則使用myPackage.fibo.functionName()

Python + PyWin32 + WMI + wget

花了兩天的時間研究batch download終於有點成果,短期目標是達到類似幹圖王的功能,因此目標當然也是傳說中的丁丁大站,這次的實驗以Python為主,另外包含PyWin32 & WMI modules並加上好用的檔案下載工具wget
運作流程從parse html頁面開始,parse三層後便可得到相片的真實連結,接著便透過win32api呼叫wget進行下載,用win32api呼叫wget原因是為了將視窗設定為隱藏,同時以最簡單的方式達到multithread download,初步成果看起來還頗不錯的。至於要下載要multithread到什麼程度可能還需要再仔細琢磨,如果每一個檔案都佔用一個thread的話thread數可能會不夠用@@,或許一個帳號用一個thread是不錯的選擇,然後將同帳號下的照片都queue起來慢慢下載。
以下是這兩天寫的testing code,離成品還有一段距離(eg.尚無法處理需要帳號的相簿,以及許多coding的細節),但是還是可以當作範例參考:
grab_n_view_sample.py

Friday, February 15, 2008

SET NAMES

在query DB之前要記得先SET NAMES,例如(Python code):

cursor = db.cursor()
sql_cmd = 'SET NAMES "utf8"'
cursor.execute(sql_cmd)


使用同樣cursor的query只需要SET NAMES一次,但是每個不同的cursor都需要SET NAMES,
以防deploy目標DB的default encoding與開發機的設定不同造成顯示亂碼的狀況。

NSIS + appsev + Python + python mods

我花了三天的時間寫出生平第一個堪稱完整的安裝檔(含完整的uninstaller),裡面包了:
1. appserv installer
2. Python installer
3. Python modules' installers for Apache & MySQL
4. 我之前寫的簡易型倉儲頁面

過程中發現Python的安裝檔在interactive mode[1]與passive mode[2]下的行為模式不一樣,
讓我花了好一些時間尋找為何安裝後無法啟動apache server,安裝Python的時候一定要
使用interactive mode,這樣子之後裝上apache的python_mod之後才能夠正常restart
apache server。

看到安裝後網頁能夠順利運作與反安裝完後一切檔案皆煙消雲散的感覺真不錯 :-)
至於Linux下的installer(通常是make install)可能還要再另外花時間研究了。


[1] msiexec /i "Python installer"
需要使用者不停的點選下一步或是做另外的設定
[2] msiexec /passive /i "Python installer"
以預設選項完成安裝,使用者不需要多按一下鍵盤/滑鼠