2014-02-13 88 views
0

我目前有以下代碼來手動獲取目錄路徑,我想添加拖放以及,所以我可以將文件夾拖放到窗口中。Wxpython瀏覽或拖放文件夾

self.pathindir1 = wx.TextCtrl(self.panel1, -1, pos=(35, 120), size=(300, 25)) 
self.buttonout = wx.Button(self.panel1, -1, "Open", pos=(350,118)) 
self.buttonout.Bind(wx.EVT_BUTTON, self.openindir1) 

def openindir1(self, event): 
    global indir1 
    dlg = wx.DirDialog(self, "Choose a directory:", style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) 
    if dlg.ShowModal() == wx.ID_OK: 
     indir1 = dlg.GetPath() 
     self.SetStatusText("Your selected directory is: %s" % indir1) 
    self.pathindir1.Clear() 
    self.pathindir1.WriteText(indir1) 
+0

我認爲拖放已經被wx.DirDialog支持,但是這個操作意味着「複製並粘貼」。也許你需要實現你自己的DirDialog –

回答

1

我不知道你想怎麼一個wx.DirDialog有拖和滴入口結合,因爲他們的閱讀你的程序中的文件路徑兩種不同的方式。
對於拖和下降的條目,你可能要定義一個wx.FileDropTarget類:

class MyFileDropTarget(wx.FileDropTarget): 
    """""" 
    def __init__(self, window): 
     wx.FileDropTarget.__init__(self) 
     self.window = window 

    def OnDropFiles(self, x, y, filenames): 
     self.window.notify(filenames) 
# 

然後在你的框架:

class MyFrame(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, None) 
     ........................... 
     dt1 = MyFileDropTarget(self) 
     self.tc_files = wx.TextCtrl(self, wx.ID_ANY) 
     self.tc_files.SetDropTarget(dt1) 
     ........................... 

    def notify(self, files): 
     """Update file in testcontrol after drag and drop""" 
     self.tc_files.SetValue(files[0]) 

有了這個例子中,你生成一個文本控件可以丟棄你的文件。 請注意,通知方法在其files參數中收到的是一個列表。
如果你把你的文件夾名稱,如文件夾:

[u'C:\\Documents and Settings\\Joaquin\\Desktop\\MyFolder'] 

,或者如果你從一個文件夾中刪除一個或多個文件,您可以:

[u'C:\\Documents and Settings\\Joaquin\\Desktop\\MyFolder\\file_1.txt', 
u'C:\\Documents and Settings\\Joaquin\\Desktop\\MyFolder\\file_2.txt', 
................................................................... 
u'C:\\Documents and Settings\\Joaquin\\Desktop\\MyFolder\\file_n.txt'] 

是你如何處理這些名單。對於這個例子,我想你正在選擇文件,我在測試控件中寫入第一個文件files[0]

+0

所以我已經使用了第一塊代碼,並保持它作爲一個類,第二塊我已經插入到我的當前面板,點之間的代碼,但似乎無法得到這一切工作。 – speedyrazor

+0

請參閱編輯。我忘記了主要課程中的通知方法。這是從filedroptarget類中調用,並做任何你想要做的時候放棄文件 – joaquin

+0

謝謝joaquin,現在當我拖放一個文件夾我得到TypeError:所需的字符串或Unicode類型 – speedyrazor