十一月 20, 2009

電腦做什麼事
pydoing
is about »

tag cloud

» 第十五章 Docs、Demo與wxGlade

Demo 避免重新發明輪子 先看看效果 整合問題 輔助工具:wxGlade 下一步 wxPython官網的下載頁,除了wxPython的安裝檔外,還可以下載「Docs, Demo, Samples, etc.」的安裝檔。 點擊開啟大圖...... 「 Docs 」就是文件,「 Demo 」是展示的範例,「 Samples 」則是範例的原始程式碼,當安裝完成後,打開開始功能表,我們會發現安裝的許多工具程式,先來看看 Other Docs 資料夾。 裡頭包含安裝指南、手冊等所有的文件,我們移動游標,點擊底下的wx HTML Help說明檔。 點擊開啟大圖...... 這個說明檔提供了wxWidgets詳盡的參考說明。 點擊開啟大圖...... 當然,如果要深入研究由wxWidgets延伸而來的wxPython,這些說明文件就會是很重要的參考資源。

» 第十四章 簡單的文字編輯器

建立視窗及狀態列 建立本文區 建立工具列 建立選單列 建立新檔的訊息視窗 開始編輯後的狀態列提示 檔案選單及警告訊息 編輯選單的功能 說明選單中的關於視窗 上一章中,我們看到如何在面板中排列提示訊息、輸入文字方塊,以及顯示歡迎及現在時間的訊息。這一章裡,我們以簡單的文字應用軟體為例,說明其他常見的視窗元件,包含選單列、工具列、狀態列與對話視窗如何建立。 圖形使用者介面基本的規劃如下圖。 點擊開啟大圖...... 第一行的選單列,預計有以下三個功能表。 點擊開啟大圖...... 下一行的工具列,利用圖形將常用功能製作成九個按鈕。 點擊開啟大圖...... 視窗下方的狀態列則作為提供提示訊息。 建立視窗及狀態列 以下的程式建立一個具有狀態列的視窗。 #《電腦做什麼事》的範例程式碼 http://pydoing.blogspot.com/ #-*- coding: UTF-

» 第十三章 應用程式介面設計

Say Hello! 文件編碼及u前綴字串 繼承結構 MyFrame 字型設定與顯示文字 使用BoxSizer來布局 按鈕事件 我們開始介紹另一個圖形介面設計,Python另一個從C++語言延伸出的wxPython模組庫,專門用來開發應用程式。應用程式也就是我們平常所說的軟體,文書處理軟體如Word、Writer或Pages,網頁瀏覽器如I.E.、FireFox或Safari,還有其他各式各樣的軟體,可以進行不同的應用。 在利用Pygame寫遊戲的時候,由於遊戲中的物體如乒乓球中的球、球拍,或是象、虎、貓、鼠生存遊戲中四隻動物的移動,實際在螢幕上移動的是Pygame繪出的圖形或是我們提供的圖檔,他們在視窗中的顯示位置並不固定,所有的座標都是由計算得來的。 然而當我們使用軟體時,絕大多數應用軟體的情況很不一樣,大部分視窗所顯示的圖形都已經安排好位置,因而要進行一項操作時,

六月 5, 2007

TerryH's Blog
TerryHBlog
is about »
» 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 應該是不錯的選擇

biggo.com.tw

A Django site.