使用wxpython查找文本对话框

使用wxpython查找文本对话框,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,有没有人举过一个非常简单的例子,在wxpython中使用带有文本组件的find对话框 提前感谢。使用 使用 wx.FindReplaceDialog的使用并不像我们从其名称中所期望的那样严格。 此对话框为您提供了一个对话框小部件,其中包含搜索(或替换)操作的参数和条目,您可以从对话框中读取这些参数和要查找的字符串(实际上是从事件或从wx.FindReplaceData对象)。但是,阅读、搜索和/或替换目标文本以及可视化点击的过程必须单独实施 例如,这是一个显示对话框的图形,其中有一个要查找的字符

有没有人举过一个非常简单的例子,在wxpython中使用带有文本组件的find对话框

提前感谢。

使用

使用


wx.FindReplaceDialog
的使用并不像我们从其名称中所期望的那样严格。 此对话框为您提供了一个对话框小部件,其中包含搜索(或替换)操作的参数和条目,您可以从对话框中读取这些参数和要查找的字符串(实际上是从事件或从
wx.FindReplaceData
对象)。但是,阅读、搜索和/或替换目标文本以及可视化点击的过程必须单独实施

例如,这是一个显示对话框的图形,其中有一个要查找的字符串和一个文本控件,其中找到的字符串是彩色的

该图是用下面的代码生成的。但是请注意,此代码并没有完全正常工作。实际上,它只适用于第一次搜索。对于下一次搜索,您必须从当前位置执行一个新的
string.find()
,并且您可能还希望“清理”以前找到的字符串,使其具有原始样式。此外,脚本不使用其他参数(搜索方向、强制匹配大小写等)

要充分利用小部件,您可以检查的属性和方法,以及它们发出的消息


或者,您可以检查代码。GUI是wxPython,有一个插件,用于在目录树的不同深度查找包含给定文本的文件。你可以从那里得到一个很好的暗示。然而,它不是一个你想要的
wx.Dialog

使用
wx.FindReplaceDialog
并不像我们从它的名字中所期望的那样严格。 此对话框为您提供了一个对话框小部件,其中包含搜索(或替换)操作的参数和条目,您可以从对话框中读取这些参数和要查找的字符串(实际上是从事件或从
wx.FindReplaceData
对象)。但是,阅读、搜索和/或替换目标文本以及可视化点击的过程必须单独实施

例如,这是一个显示对话框的图形,其中有一个要查找的字符串和一个文本控件,其中找到的字符串是彩色的

该图是用下面的代码生成的。但是请注意,此代码并没有完全正常工作。实际上,它只适用于第一次搜索。对于下一次搜索,您必须从当前位置执行一个新的
string.find()
,并且您可能还希望“清理”以前找到的字符串,使其具有原始样式。此外,脚本不使用其他参数(搜索方向、强制匹配大小写等)

要充分利用小部件,您可以检查的属性和方法,以及它们发出的消息

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

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