Everything:速度最快的檔案名稱搜尋工具(Linux版本)

來源:互聯網
上載者:User

文章的名稱是借用善用佳軟的.Everything是windows的一個快速搜尋工具. 基本上轉移到Linux上來後,沒有怎麼用過. 一直在用Gnome-Do,感覺還可以. 這個程式只是用來練習wxPython用的,目前還只是一個很簡單的版本. 當然,後端用的是mlocate, 這個在Linux尋找原理與everything基本一樣,不過命令列. 而我只是寫了一個前端GUI而已.

以下是初步代碼, 後續會一直完完善. 

 1 #/usr/bin/python 2 #-*-<coding=UTF-8>-*- 3  4 """ 5 本例為windows下everything程式的linux版本.後端基於locate實現. 6 """ 7  8 import wx 9 import os10 import subprocess11 12 class GuiMainFrame(wx.Frame):13     14     def __init__(self):15         wx.Frame.__init__(self,parent=None,id=-1,title="",pos=wx.DefaultPosition,size=wx.DefaultSize)16         17         #添加面板.18         panel = wx.Panel(self)19         20         #建立功能表列21         menubar = wx.MenuBar()22         23         #File menu24         fileMenu = wx.Menu()25         fileMenu.Append(-1,"&Open","")26         menubar.Append(fileMenu,"&File")27 28         #Edit menu29         editMenu = wx.Menu()30         editMenu.Append(-1,"&Copy","")31         menubar.Append(editMenu,"&Edit")32 33         #Help/About menu34         helpMenu = wx.Menu()35         helpMenu.Append(-1,"About","")36         menubar.Append(helpMenu,"&Help")37         38         #調用SetMenuBar,使其在架構中顯示出來39         self.SetMenuBar(menubar)40         41         #在面板中添加尋找輸入框42         #filterInput = wx.TextCtrl(panel,-1,"")43         self.filter = wx.SearchCtrl(panel,style=wx.TE_PROCESS_ENTER)44         self.filter.Bind(wx.EVT_TEXT_ENTER,self.DoSearch)45         #self.filter.Bind(wx.EVT_TEXT,self.DoSearch)  #這個會導致程式長時間無響應,所以還在找更有效率的方法.46         47         #在面板中添加類型選擇框48         typeList=["all:*.*","document:*.doc,*.xls,*.ppt","audio:*.mp3","vedio:*.rmvb,*.mkv","application:*.exe"]49         fileType = wx.ComboBox(panel,-1,"",choices=typeList)50 51         #在面板中添加輸出結果顯示框52         self.multiText = wx.TextCtrl(panel,-1,"",style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER)53         self.multiText.SetMinSize((800,600))54 55         #添加狀態列,是否要加入到sizer中管理.56         statusbar = self.CreateStatusBar()57     58         #管理布局.建立兩個sizer,主sizer管理filterSizer,結果顯示框兩個控制項59         #filterSizer管理尋找輸入框和類型選擇框60         mainSizer = wx.BoxSizer(wx.VERTICAL)61         62         filterSizer = wx.GridSizer(rows=1,cols=2)63         filterSizer.Add(self.filter,0,wx.EXPAND)64         filterSizer.Add(fileType,0,wx.EXPAND)65 66         #這句話導致文字框顯示有空隙. 為什麼不能這樣用? menubar是否不需要添加進mainSizer67         #mainSizer.Add(menubar)68         mainSizer.Add(filterSizer,0,wx.EXPAND)69         mainSizer.Add(self.multiText,2,wx.EXPAND|wx.ALL)70         #frame中建立的statusbar,不需要添加到sizer中進行管理.71         #mainSizer.Add(statusbar,0,wx.EXPAND)72         73         #這個是關鍵之處,將sizer與frame關聯起來.74         panel.SetSizer(mainSizer)75         mainSizer.Fit(self)76 77     def DoSearch(self,event):78         pattern = self.filter.GetValue()79         print pattern80         cmd = "/usr/bin/locate"81         arg1 = "-i"82         arg2 = "-d"83         arg3 = "/var/lib/mlocate/mlocate.db"84         arg4 = pattern85 86         p1=subprocess.Popen([cmd,arg1,arg2,arg3,arg4],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)87         (stdoutdata,stderrdata) = p1.communicate()88         #stdoutdata = "Just test"89         self.multiText.SetValue(stdoutdata)90 91 if __name__ == "__main__":92     app = wx.PySimpleApp()93     frame = GuiMainFrame()94     frame.Show()95     app.MainLoop()
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.