星期二, 7月 04, 2006

[.Net]IronPython(4) - 類別、繼承、模組化

基本上還是跟上次的一樣,只是我們要重新寫過,直接繼承 Form 類別,然後模組化。

Python 定義類別的方法相當簡單:
class classname( parentclass ):
  def __init__( self ):
    # initialize
  def doSomething( self ):
    # do something

他是以左邊的縮排來決定範圍,所以同樣縮排就表示是同一區塊。
self 則是表示自己,也就類似 c# 的 this。

所以我們把昨天的程式碼重新寫過:
import clr
clr.AddReferenceByPartialName("System.Windows.Forms")
clr.AddReferenceByPartialName("System.Drawing")
from System.Windows.Forms import *
from System.Drawing import *

class OptionForm( Form ):
  def __init__(self):
    self.InitializeComponent()

  def InitializeComponent(self):
    self.Text = "RSSMSN - customize your msn personal message"

    # Initialize Label
    lblHello = Label(Text="Hello world!" )
    lblHello.Visible=True
    lblHello.Location=Point( 10, 10 )
    lblHello.AutoSize=True
    self.Controls.Add( lblHello )

    # Initialize NotifyIcon
    notifyIcon1 = NotifyIcon( Visible=True, Text="RSSMSN", Icon=Icon("Matrix.ico") )

    # Initialize Form
    self.StartPosition=FormStartPosition.CenterScreen

大致上就會是這樣子,我們將這個檔案命名為 fmOption.py。

主程式則另外放到 main.py:
import clr
clr.AddReferenceByPartialName("System.Windows.Forms")
clr.AddReferenceByPartialName("System.Drawing")
from System.Windows.Forms import *
from System.Drawing import *
from fmOption import *

f = OptionForm()
Application.Run(f)

你可以看到主程式變得簡單許多。這邊只需要將剛剛寫好的 fmOption.py 引用進來,再將 OptionForm 實體化,請 Application 類別去把窗開出來就好了。
Python 引用其他檔案的方法,統一都是 from your_module import classname。
這個 your_module 可以是 assembly name 也可以是 module name。

大致上就是這樣子了。

下次的目標是加上 destructor 以確保 System Tray 的 Icon 會在程式結束時消失。

參考資料:

沒有留言: