分类: Python/Ruby
2008-10-24 18:35:53
對於使用者而言,這樣的操作方式才是最直覺的UI介面。我們在在wxPython下面支援將檔案由程式外部拖放到程式中,需要費很多的功夫嗎?一點也不,其實非常簡單: 首先你先要繼承wxFileDropTarget這個類別。請看下面這個例子:
class FileDropTarget(wxFileDropTarget):
def __init__(self, window):
wxFileDropTarget.__init__(self)
self.window = window
def OnDropFiles(self, x, y, filenames):
self.window.SetValue(str(filenames))
首先,我們看看在__init__()中作了什麼?在這個method中,我們引入了一個參數window,透過這個window參數所傳入的是一 個視窗 物件,先將這個視窗物件記錄在我們自己所繼承的物件中。到目前為止都還看不出有什麼作用。不過,真正的工作是在OnDropFiles的event handler中。在這個event handler中,除了self參數外,另外還有三個參數,分別為x, y以及filenames。其中,x, y是當滑鼠放掉時游標所在的位置。而filenames是一個tuple。裡面記載了被拖拉 進來的檔案名稱列表。在這個範例中,我們僅是簡單的將取得的檔案列表寫入指定視窗的中。 假設我們有個wxTextCtrl物件名為TextBox。要讓這個物件能夠接受檔案,要用下面程式既可以了:
dropTarget = FileDropTarget(TextBox)
在in action 里有具体示例。
TextBox.SetDropTarget(dragTarget)