Posts for: #WxPython

multiprocessing in wxPython

根據 wiki 上面的文件說 http://wiki.wxpython.org/MultiProcessing

不可以在 wx.App 的程式迴圈中,去產生新的 Process

真的試了一下,還真不行,在不用 threading, subprocess, 或是 wx.Process 的寫法下,只要把產生新 Process 的動作移出

wx.App 的範圍裡就沒有問題了

另外如果程式是用 pyinstaller 包裝成一個檔案,也要注意這 Process 需要重包來解決問題

http://www.pyinstaller.org/wiki/Recipe/Multiprocessing


筆記一下,以免以後忘了

AutoMan 更新測試

由於有網友,反應,康和 API 更新後,有問題,所以這是一版新的更新,針對,康和新版的 OCX 元件

詳細 API 我也沒有下單測試,除非,康和變更 API 介面,不然,應該都沒問題才對 (都下單這麼久了 XD)

記得,您有更新康和新版的 OCX API 元件 才需要,不過,一樣自己要測試一下

軟體時限,延到 201312 月

下載點 http://dl.dropbox.com/u/14137697/20110608/automan.exe


這是程式更新的兩個變動,幾乎沒有改什麼

https://github.com/terryh/automan/commit/631921a41e80e43b12b0fc9f4e456e87fa68d853

https://github.com/terryh/automan/commit/7795066f847672cf3d4ed7c33b3220ae29946f39

關於 AutoMan 可參考以前文章 AutoMan

automan open source

AutoMan 是前些時候寫得 AutoMan 康合日盛下單機測試版,自己有需要開發的圖形介面下單機,一開始,看看好像大家都收錢,就也跟著大家的規矩,定一個小小的收費門檻,讓想要做程式交易的人,心裡有個底,但是後來自己心境的轉換,也算是改變吧,工具只是,開始而已,後面難的是風險的控管(心的控管),及交易策略的開發與執行,一直以來,除了停電,網路斷,還有報價源,報價錯誤,這些反而比較不不穩地外,automan 都很稱職,我先 Eating my own dog food 的原則,用了很久了,不過醜話還是要先說,工具,只是開始,是幫你,還是害你,誰也不知道,自己才是主人,賺了,記得多幫助別人,錢賺來是要花的,輸了,不要怪東怪西,怪天怪地,怪政府

各位,要是有好的建議或是程式的 patch 請不吝賜教,程式非常的短

專案網頁 https://github.com/terryh/automan,說明也可以在專案頁看到

目前,有 2014 12 月的期限,只要改一下,重新編譯就幾乎沒限制了,有期限,是希望,有更新的話,大家可以重新下載,不要有錯誤(bug),找到修正後,大家還是傻傻的舊版一直用

更新紀錄

0.4BETA 增加程式圖示,有好心人士可以回報一下在 64 bit 的 windows 環境下可不可以,還是需要另外建構,這一個檔案,用 PyInstaller + Python2.7.2 在 windows XP 32bit 的環境建構,第一次執行會產生 COM 的紀錄檔,先前都是用 Python2.5 + py2exe 在 32bit 環境建構,期限 201412,發佈時間2012/04/01

http://dl.dropbox.com/u/14137697/20120401/automan.exe

0.4BETA,期限 201412,發佈時間 2012/03/29
支援康和 OCX v3 的 API,移除支援舊版本康和 API,因為他們不支援了,訂正康和的代碼提示
http://dl.dropbox.com/u/14137697/20120329/automan.exe

0.3BETA,期限 201312
有支援康和 OCX v2 的 API
http://dl.dropbox.com/u/14137697/20110608/automan.exe

0.2BETA,期限 201212
http://dl.dropbox.com/u/14137697/automan.exe

在 windows XP 上,同時需要 MSVCR71.DLL 及 MSVCP71.DLL 請自行下載,如果是Windows XP可放在 C:/WINDOWS/SYSTEM32/ 下面即可,或是存到程式執行目錄

http://www.dll-files.com/dllindex/dll-files.shtml?msvcp71

http://www.dll-files.com/dllindex/dll-files.shtml?msvcr71


PS: 有認真的慢慢在做,像 TS 的工具,有機會,在發表給大家用,不過自從開始作遊戲之後,這一個順序,排在做遊戲之後 ;-),到了遊戲公司後,遇見幾個有趣的人,做遊戲真的很好玩耶,以前都覺得玩遊戲很浪費生命

A Memo for wxPython

這是作給自己看的筆記,怕以後自己都忘了,主要說明一個 windos 庫存軟體的開發我所用的工具

要注意的事,都是安裝 win32 的套件包

基本套件


Python2.5
http://www.python.org/

wxPython http://wxpython.org/

wxGlade http://wxglade.sourceforge.net/ 可以快速拖拉的方式產生視窗程式碼
PIL
http://www.pythonware.com/products/pil/

Django http://www.djangoproject.com/ ,拜託不要K我,我在 windows 裡也是用他的 ORM,除了,幾乎所有的 SQL 都可以作,如果嫌套件太大,可以把 locales 的目錄去掉,就很小了

IPython
http://ipython.scipy.org/moin/ ,必須加裝 pyreadline http://ipython.scipy.org/dist/ 這種 shell 方式的測試開發,算是特別的福利喔,好好珍惜,很好用的
pywin32 http://sourceforge.net/projects/pywin32/ ,可以用 COM 的方式來控制元件

ReportLab
http://www.reportlab.org/ ,可以用PDF來處理列印

reportlab 在 windows 下有一個很久沒有修的 bug,maillist 上也有人說,就是沒修正,記得 /reportlab/pdfbase/_cidfontdata.py line 137

‘MSung-Light’: (‘cht’, ‘UniGB-UCS2-H’)
改成
‘MSung-Light’: (‘cht’, ‘UniCNS-UCS2-H’)

生成安裝包

py2exe
http://www.py2exe.org/ 生成執行程式,0.6.6版有一點怪怪的 bug,也許是 windows 系統的問題,記得發行套件加入 MSVCP71.dll http://www.dll-files.com/dllindex/dll-files.shtml?msvcp71

NSIS
http://nsis.sourceforge.net/ ,可以用來作安裝包,好用



ORM and SQL

在有 Database 的應用裡,寫多了 SQL(Structure Query Language) 會覺得他是一種累贅,讓你的邏輯不斷的,在程式語言,及 SQL 之間轉換,所以後來,就有了,很流行的 Database ORM (Object Relational Mapper) 來幫助我們開發,一來,可以用相同的邏輯思考方式,用物件的方式,去對應資料庫的元件,一來,可以有資料庫的抽象層,對一個系統的開發有很大的助益,但是,如果,要寫的 code ,比一般的 SQL 還要複雜,還要隴長,你該怎麼作呢?

寫回去 SQL 嗎?還是就去適應這樣的物件對應方式?

這也許沒有一定的答案,不過,我來分享一下,我用 Django ORM 到目前所遇到的問題,和解決的方法,所以,裡面有一些是個人好惡的選擇

* 現在Unicode 的branch 還沒有 merge 到 truck 裡,如果用 wxPython unicode 的版本,自己要處理,string to unicode 及 unicode to string 的問題

* ManytoManyField 的欄位,Q object OR 沒有辦法套用,在 djangosnippets 有解決辦法,連結是 http://www.djangosnippets.org/tags/m2m/ 不過還是希望有官方的

* 目前如果是用 truk 的 Django, 用 groupu_by() 只能在對應該物件的 database table 裡分 group,無法使用別的欄位作 group_by 的條件,在別的 branch 有解決了,可是基於,愛乾淨不要混用,太多 branch 的原則,我是用 extra 的解法,算是走 SQL 的回頭路,不過, “GROUP BY” 在 SQL 也是標準的語法,不至於破壞了資料庫的抽象層,不過,如果有用 GROUP BY 的話,不可以混用 filter 的功能,不然,產生的 SQL 語法不對,我們要決定所有的 where 條件,第一個例子,是有 where 的 group by,第二個,是沒有 whehe 可是要強加 grouop by 在不同欄位,這樣就還可以在 DB 上只用一個 query,在 Django 上還是傳回 QuerySet 的作法,不過,這一個 QuerySet 不可以再用 filter 的方式,因為這樣會讓 group by 及 where 的位置錯了

範例1::

qset = Stock.objects.extra(select={’totalsum’:‘sum(volume)’},where=[“customer_id=’%s’ group by product_id” %(customerid)])


範例2::

qset = Stock.objects.extra(select={’totalsum’:‘sum(volume)’},where=[“1 group by product_id”])

以上,是目前,我遇到的一些限制,及解決辦法,也許對您有參考的價值,在 Desktop 的應用程式上, 如果,還有更複雜的的需求, SQLAlchemy 應該是不錯的選擇

.. -- mode: rst --