wxpython 点击副窗口 如何主窗口textctrl中的文本选择状态不消失

问题遇到的现象和发生背景

最近我在学习wxpython,就准备了一个类似notepad的实例学习。
然后我做好了一个替换文本的功能,希望使它能够在鼠标选中文本时只替换鼠标选中的文本,
代码逻辑问题应该不大,但是我写好以后发现因为替换文本我是单独写了一个窗口
所以当我在主窗口用鼠标选择好文字以后,再点击替换文本的窗口,主窗口文字的选中状态就消失了。
代码如下:

问题相关代码,请勿粘贴截图
import wx
import tkinter.filedialog
from os import system


class _Frame(wx.Frame):
    def __init__(self):  # 初始化
        wx.Frame.__init__(self, None)
        self.SetSize((960, 660))
        self.SetTitle('notepad')
        icon = wx.Icon('图标.jpg')
        self.SetIcon(icon)
        self.saved = False
        self._menu()
        self._entry()

    def _menu(self):
        self.menuBar = wx.MenuBar()  # 创建菜单栏
        self.SetMenuBar(self.menuBar)  # 将菜单栏添加进主窗口

        self.menu1 = wx.Menu()  # 定义菜单
        self.menuBar.Append(self.menu1, '选项')  # 将菜单1添加进菜单栏

        self.bye = wx.MenuItem(None, -1, '退出\tctrl+q')  # 定义退出菜单项
        self.save = wx.MenuItem(None, -1, '保存\tctrl+s')  # 定义保存菜单项
        self.new = wx.MenuItem(None, -1, '新建\tctrl+n')  # 定义新建窗口菜单项
        self.replace = wx.MenuItem(None, -1, '替换\tctrl+r')  # 定义替换文本菜单项

        self.menu1.Append(self.new)  # 将新建窗口菜单项添加进菜单1
        self.menu1.Append(self.replace)  # 将替换文本菜单项添加进菜单1
        self.menu1.Append(self.save)  # 将保存菜单项添加进菜单1
        self.menu1.Append(self.bye)  # 将菜单项添加进菜单1

        self.Bind(wx.EVT_MENU, self._exit, self.bye)  # 绑定退出按钮
        self.Bind(wx.EVT_MENU, self._save, self.save)  # 绑定保存文件按钮
        self.Bind(wx.EVT_MENU, self._new_window, self.new)  # 绑定新建窗口按钮
        self.Bind(wx.EVT_MENU, self._replace_window, self.replace)  # 绑定文本替换按钮

    def _entry(self):  # 定义文本输入框
        self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)

    def _exit(self, e):  # 定义关闭窗口函数
        self.Destroy()

    def _save(self, e):  # 定义保存文件函数
        if not self.saved:  # 在文件目录尚未选择前弹窗选择
            self.path = tkinter.filedialog.asksaveasfilename(filetypes=[('文本文档', '.txt',)])
        if '.txt' not in self.path:  # 在用户输出的路径中添加后缀名
            self.path += '.txt'
            self.saved = True
        self.SetTitle(self.path.split('/')[-1])  # 将窗口标题设置为文件名称
        with open(self.path, 'w') as file:
            file.write(self.control.GetValue())  # 保存文件

    def _new_window(self, e):  # 定义新建窗口函数
        _Frame().Show(True)
        wx.App().MainLoop()

    def _replace_text(self, e):  # 定义替换文本函数
        self.a_text = self.a.GetValue()  # 获取要替换的文本
        self.b_text = self.b.GetValue()  # 获取要替换为的文本
        self.text = self.control.GetValue()  # 获取用户输入内容
        if self.control.GetStringSelection():
            self.text = self.control.GetStringSelection()
        self.counter = 1
        self.c_text = self.text.replace(self.a_text, self.b_text)  # 替换后的文本
        self.contrast_text = self.text.replace(self.a_text, self.b_text, 1)  # 记录替换次数
        if self.contrast_text == self.text:
            self.counter = 0
            system('msg %username% 替换失败!未能找到要替换的字符')
        else:
            while not self.c_text == self.contrast_text:
                self.contrast_text = self.contrast_text.replace(self.a_text, self.b_text, 1)
                self.counter += 1
            system('msg %username% \"{}\"'.format('''替换成功!共替换了''' + str(self.counter) + '处字符。'))

        self.control.SetValue(self.c_text)  # 将输入框中文本替换为替换后的文本

    def _replace_window(self, e):  # 定义替换文本窗口
        self.app = wx.App()
        self.frame_r = wx.Frame(self, title='替换', size=(484, 200), name='frame')
        self.icon = wx.Icon(r'C:\Users\Administrator\Desktop\狗头.png')
        self.frame_r.SetIcon(self.icon)
        self.p = wx.Panel(self.frame_r)
        self.p.SetOwnBackgroundColour((255, 255, 255, 255))
        self.frame_r.Centre()
        self.a = wx.TextCtrl(self.p, size=(240, 30), pos=(150, 15), value='', name='text',
                             style=0)
        self.b = wx.TextCtrl(self.p, size=(240, 30), pos=(150, 60), value='', name='text',
                             style=0)
        self.alert_text = wx.StaticText(self.p, size=(100, 30), pos=(40, 16), label='要替换的文本:',
                                        name='staticText', style=2321)
        self.b_text = wx.StaticText(self.p, size=(75, 30), pos=(64, 65), label='替换为:',
                                    name='staticText', style=2321)
        self.a_button = wx.Button(self.p, label='替换', style=wx.BU_BOTTOM, pos=(200, 115))
        self.frame_r.Bind(wx.EVT_BUTTON, self._replace_text, self.a_button)
        self.frame_r.Show()
        self.app.MainLoop()


if __name__ == '__main__':
    app = wx.App()
    f = _Frame()
    f.Show(True)
    app.MainLoop()


我想要达到的结果

我希望效果是在主窗口选择文字之后,点击替换文本窗口,
主窗口文本的选择状态不会消失

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^