linux搜索文件速度,Everything:速度最快的文件名搜索工具(Linux版本) 轉

fb2d097eff351d8b8c3c63ba4c605df9.gif

1 #/usr/bin/python

2 #-*--*-

3

4 """

5 本例為windows下everything程序的linux版本.后端基於locate實現.

6 """

7

8 import wx

9 import os

10 import subprocess

11

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 menu

24 fileMenu = wx.Menu()

25 fileMenu.Append(-1,"&Open","")

26 menubar.Append(fileMenu,"&File")

27

28 #Edit menu

29 editMenu = wx.Menu()

30 editMenu.Append(-1,"&Copy","")

31 menubar.Append(editMenu,"&Edit")

32

33 #Help/About menu

34 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是否不需要添加進mainSizer

67 #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 pattern

80 cmd = "/usr/bin/locate"

81 arg1 = "-i"

82 arg2 = "-d"

83 arg3 = "/var/lib/mlocate/mlocate.db"

84 arg4 = pattern

85

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()

fb2d097eff351d8b8c3c63ba4c605df9.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值