顯示具有 python 標籤的文章。 顯示所有文章
顯示具有 python 標籤的文章。 顯示所有文章

2009年6月30日 星期二

[Python] wxPython 直接使用 XRC 建立 GUI

一直以來,在Python上手工刻GUI都是件讓我很困擾的事。在Tkinter, wxPython, PyGTK, PyQT…一堆GUI Framework裡面,我還找不到一個適合自己的。

本來是想用wxPython來上手的,沒想到越練習越挫折,囧rz。

這邊有一個用XRC(xml resources)來建構GUI的部份,範例是可以正常運作,但是經小修增後,會出現一些我不能理解的問題…。

xml.py

#!/usr/bin/python
# xml.py

import  wx
import  wx.xrc  as  xrc

class Xml(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)

        res = xrc.XmlResource(’resource.xrc’)
        res.LoadPanel(self, ‘MyPanel’)

        self.Bind(wx.EVT_BUTTON, self.OnClose,  id=xrc.XRCID(’CloseButton’))
        self.Center()
        self.Show(True)

    def OnClose(self, event):
        self.Close()

app = wx.App()
Xml(None, -1, ‘xml.py’)
app.MainLoop()

resource.xrc

<?xml version="1.0" ?>
<resource>
  <object class="wxPanel" name="MyPanel">
   <object class="wxButton" name="CloseButton">
    <label>Close</label>
    <pos>15,10</pos>
   </object>
  </object>
</resource>

來源參考: wxPython:XRC

[Python] 在瀏覽器開啟連結

import webbrowser, sys, os
def openurl(self, url):
  try:
    webbrowser.open(url)
  except ImportError: # pre-webbrowser.py compatibility
    if sys.platform == 'win32':
      os.system('start "%s"' % url)
    elif sys.platform == 'mac':
      try: import ic
      except ImportError: pass
      else: ic.launchurl(url)
    else:
      rc = os.system('netscape -remote "openURL(%s)" &' % url)
      if rc: os.system('netscape "%s" &' % url)

來源參考: http://www.id-snippet.com/3202/open-browser-in-python/

2009年5月7日 星期四

在IDE下使用Django Framework的方法

以下轉載自PTT的Python版文章

能夠在不進入shell or runserver的情況下使用django flamework的方式
ide的自動完成功能也終於可以用了

之前一直卡在不瞭解他settings的運作方式,
後來發現只要設定兩個環境變數就能搞定!

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import sys
sys.path += ["project 所在位置"]

在blog下做個筆記,在調測時很方便。

2009年5月5日 星期二

解決Django的內建admin,在加入圖片時會出現錯誤…

我依照Django Book的步驟去練習,如果會出現如下面的訊息:

SuspiciousOperation at /admin/books/author/add/

將settings.py內的MEDIA_ROOT設定為上傳圖片的相對路徑,類似下面:

# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = '/tmp/'

再確認一下執行manage.py的使用者有寫入該目錄的權限,這樣就應該就可以正常儲存了。

2009年5月4日 星期一

Django+MySQL在admin下發生錯誤訊息

上週在練習django搭配mysql時,在建立user時發生了下面這個問題:(註0)

這兩天在研究admin模塊,製作一個數據管理系統,發現輸入中文時雖然數據可以正常輸入sql數據庫,但是在save時會報錯。查文檔,搜索都沒有找到問題所在,查看數據庫時終於發現了原因,下面給出解決方法。

錯誤類似於"

Incorrect string value: '\xE6\xA2\xB5\xE8\x92\x82...'
for column 'message' at row 1

"

這個錯誤的解決方法是設置數據庫"auth_message"表的message一項使用utf8_unicode_ci

對於錯誤"

Incorrect string value: '\xE6\xA2\xB5\xE8\x92\x82...'
for column 'object_repr' at row 1

"

解決方法是設置django_admin_log表的object_repr一項使用utf8_unicode_ci

我看不懂它的解決方法"使用utf8_unicode_ci"…應該說不知道怎麼去單獨設置那些欄位的設定… 0rz。

我的方法是,上google查了一下,將mysql的my.ini (註1)設定修改如下:

修改 MySQL Server 的系統設定檔

修改 /etc/my.cnf (註1):
引用:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
[client]
default-character-set=utf8

最後把資料庫drop掉(我取名為django),重新建立create database django ,在mysql console下use django,輸入status,確定資料庫的設定(Db characterset)都為utf8,這樣上面的問題就解決了。

2009-05-04_102723

結論是,在剛開始建立資料庫時,就要把編碼手動給utf8了,不然會照mysql的預設值(latin)。

註0: 搭配python 2.5附的sqlite3就沒這問題。

註1: 我的mysql server是裝在windows上,所以修改的是my.ini。

2008年10月15日 星期三

使用PIL中的ExifTags讀取exif

在網路上逛到的,使用PIL (Python Image Library):

import Image
from ExifTags import TAGS

fn = r'C:\20080803.jpg'
im = Image.open(fn)
rawexif = im._getexif()
exif = dict([(TAGS.get(k,0), rawexif[k]) for k in rawexif.keys()])
for k in sorted(exif):
print str(k).ljust(20) ,exif[k]

速度還不錯,跟EXIF.py比起來…。

來源參考: http://blog.seety.org/everydaywork/2007/7/13/692/

在VIM下執行Python的方法

以python為例,命令如下:
:%w !python
2008-10-15_112247 另外,可以將這個動作設為vim巨集,配合autocmd在~/.vimrc加上以下設定:
autocmd BufRead,BufNewFile *.py map  :% w !python 
不過我倒是沒成功(linux跟windows都是),這就有待vim達人blc幫我解惑了。 來源閱讀: 在VIM內直接執行script language

2008年10月6日 星期一

Python - Special method names

在Python裡面的Class,不少特殊的方法名稱都具有特別的用途,例如__init__就是物件初始化時會自動被呼叫的方法。

剛剛Python文章讀到相關的,就隨便去把Reference文件查了出來:Special method names

以下列一些我個人認為我常用的:

名稱 用途
__init__(self[, ...]) 物件的建構式。
__del__(self) 物件的解構式。
__str__(self) print 這個物件時,會顯示的字串。
__lt__(self, other)
__le__(self, other)
__eq__(self, other)
__ne__(self, other)
__gt__(self, other)
__ge__(self, other)
物件用來互相比較時會呼叫的方法。
分別為:  <,  <=, ==, != , >, >=
__cmp__(self, other) 使用cmp()來比較物件時會呼叫此方法。
__getattr__(self, name) 使用getattr()時會呼叫此方法。
__len__(self) 使用len()時會呼叫此方法。
__getitem__(self, key) 當物件本身為可列舉時,要取回列舉元素時,要定義此方法。

__add__(self, other)

__sub__(self, other)

__mul__(self, other)

__div__(self, other)

__pow__( self, other[, modulo])

數值運算時使用到。
分別為 +, -, *, /, 平方

2008年9月22日 星期一

Python函式參數傳入的型態

網路上找到的答案如下:

  1. F(arg1, arg2, ...)
    最常見的格式。
  2. F(arg1, arg2=value2, ...)
    在宣告函式的時候,可以先給預設值。
  3. F(*arg1)
    不限參數數量,參數將保存為一個tuple。
  4. F(**arg1)
    不限參數數量,參數將保存為一個dictionary。

而函式解析參數的過程,依序由 1> 2> 3> 4 這個順序來解析。

 

延伸閱讀: python 函數參數的傳遞

2008年8月12日 星期二

IDLE的熱鍵筆記

這篇是我自己整理給自己看的,有些是我自己試過之後添上去的,僅供參考。(註0)

個人常用熱鍵:

熱鍵 中文說明 英文說明
alt + / 自動完成單詞(可重複循循) Expand Word
ctrl + → 或 ← 游標移到下一個/前一個單字  
ctrl + ↑ 或 ↓ 算是快速移動吧XD  
ctrl + ] 縮排 Indent Region
ctrl + [ 取消縮排 Dedent Region
alt + 3 注解 Comment Out Region
alt + 4 取消注解 Unconmment Region
ctrl + space 顯示自動完成(註1) Show Completions
alt + m 開啟選取(反白)的Module Open Module
alt + p 前一個指令 Previous Command
alt + n 下一個指令 Next Command
alt + c 瀏覽目前unit下面的class Class Browser
ctrl + F6 重新啟動shell Restart Shell
tab 平常是indent,前面有字時為自動完成,連按兩下可把自動完成的字貼上。  

註0: 有些熱鍵僅在互動介面下(Shell)有用,有些僅在編輯模式下有用,有的都可以使用。
註1: 會被預設切換輸入法的ctrl + space熱鍵蓋過去而無作用,需從選單直接呼叫。

 

常用指令

指令名稱或呼叫方法 功能及說明
help([object]) 列出(指令的)說明文件
pydoc 將python的文檔產生為html,可直接用browser觀看。需import pydoc。執行伺服器為pydoc.serve(port number)
dir([object]) 列出object下面的所有屬性及方法
File > Path Browser 列出python下可載入的路徑及lib

 

正在慢慢學習Python中,有什麼缺或是心得再補上...