Найти текстовый диалог с помощью wxpython

У кого-нибудь есть очень простой пример использования диалога поиска с текстовым компонентом в wxpython?

Заранее спасибо.

Ответы на вопрос(2)

Использоватьвики

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

wx.FindReplaceDialog не так просто, как мы могли ожидать от его имени. Это диалоговое окно предоставляет вам диалоговый виджет с параметрами и записями для действия поиска (или замены). Вы можете прочитать эти параметры и строку для поиска из диалога (фактически из события или изwx.FindReplaceData объект). Однако чтение, поиск и / или замена целевого текста и процесс визуализации попадания должны быть реализованы отдельно.

Это, например, рисунок, показывающий диалог со строкой для поиска и текстовым элементом управления, где найденная строка окрашена.

Рисунок был произведен с кодом ниже. Обратите внимание, что этот код не является полностью функциональным. На самом деле, это работает только для первого поиска. Для следующего поиска вы должны выполнить новый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.FindReplaceDialog, wx.FindReplaceData а также дляСобытия они излучают.

Кроме того, вы можете проверитьредактор питани стани код. Графический интерфейс wxPython и имеет плагин для поиска файлов, содержащих данный текст на разной глубине дерева каталогов. Вы можете получить хороший совет оттуда. Однако это неwx.Dialog как ты хочешь.

Ваш ответ на вопрос