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