2010-09-30 91 views

回答

-1

使用wiki

import wx 

class MyDialog(wx.Dialog): 
    def __init__(self, parent, id, title): 
     wx.Dialog.__init__(self, parent, id, title) 

class MyApp(wx.App): 
    def OnInit(self): 
     dia = MyDialog(None, -1, "simpledialog.py") 
     dia.ShowModal() 
     dia.Destroy() 
     return True 

app = MyApp(0) 
app.MainLoop() 
3

使用的wx.FindReplaceDialog并非如此简单明了,因为我们可以从它的名字的期望。 该对话框为您提供了一个对话框小部件,其中包含用于搜索(或替换)操作的参数和条目。您可以从对话框(实际上是从事件或从wx.FindReplaceData对象)读取这些参数和字符串以查找。然而,阅读,搜索和/或替换目标文本以及将命中可视化的过程必须单独实施。

例如,这是一个显示对话框的图形,该对话框包含一个字符串以查找以及一个文本控件,其中发现的字符串是彩色的。 enter image description here

该图已经用下面的代码生成。但请注意,此代码功能不完整。事实上,它只适用于第一次搜索。对于下一次搜索,您必须从当前位置执行新的string.find(),并且您还可能需要“清理”之前找到的字符串,并将其设为原始样式。此外,脚本不使用其他参数(搜索方向,强制匹配大小写等)。

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, *args, **kwds): 
     kwds["style"] = wx.DEFAULT_FRAME_STYLE 
     wx.Frame.__init__(self, *args, **kwds) 
     self.tc = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_RICH2) 
     self.bt_find = wx.Button(self, -1, "find") 

     self.Bind(wx.EVT_BUTTON, self.on_button, self.bt_find) 
     self.Bind(wx.EVT_FIND, self.on_find) 

     self.pos = 0 
     self.size = 0 
     # 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.tc, 1, wx.EXPAND, 0) 
     sizer.Add(self.bt_find, 0, wx.ALIGN_CENTER_HORIZONTAL, 0) 
     self.SetSizer(sizer) 
     sizer.Fit(self) 
     self.Layout() 

    def on_button(self, event): 
     self.txt = self.tc.GetValue() 
     self.data = wx.FindReplaceData() # initializes and holds search parameters 
     self.dlg = wx.FindReplaceDialog(self.tc, self.data, 'Find') 
     self.dlg.Show() 

    def on_find(self, event): 
     fstring = self.data.GetFindString()   # also from event.GetFindString() 
     self.pos = self.txt.find(fstring, self.pos) 
     self.size = len(fstring) 
     self.tc.SetStyle(self.pos, self.pos+self.size, wx.TextAttr("red", "black")) 


if __name__ == "__main__": 

    app = wx.PySimpleApp(0) 
    frame_1 = MyFrame(None, wx.ID_ANY, "") 
    frame_1.Show() 
    app.MainLoop() 

要充分利用小部件,你可以检查的属性和方法的wx.FindReplaceDialogwx.FindReplaceData以及为他们发出events

或者,您可以检查stani's python editor代码。 GUI是wxPython,并有一个插件用于查找包含给定文本的目录树不同深度的文件。你可以从那里得到一个好的提示。但它不是你想要的wx.Dialog