在wxpython中,将所有文本从一个TextCtrl复制、剪切、粘贴并选择到另一个



我想剪切、粘贴、复制并选择从textcrtl到textcrtl的文本。有人能帮帮我吗?我的脑子已经好几个小时了。查看下面的代码,感谢您的帮助。。。

import wx
import os
class Editor(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(600, 500))
        # setting up menubar
        menubar = wx.MenuBar()
        edit = wx.Menu()
        cut = wx.MenuItem(edit, 106, '&CuttCtrl+X', 'Cut the Selection')
        edit.AppendItem(cut)
        copy = wx.MenuItem(edit, 107, '&CopytCtrl+C', 'Copy the Selection')
        edit.AppendItem(copy)
        paste = wx.MenuItem(edit, 108, '&PastetCtrl+V', 'Paste text from clipboard')
        edit.AppendItem(paste)
        delete = wx.MenuItem(edit, 109, '&Delete', 'Delete the selected text')
        edit.AppendItem(delete)
        edit.Append(110, 'Select &AlltCtrl+A', 'Select the entire text')
        menubar.Append(edit, '&Edit')
        self.SetMenuBar(menubar)
        self.Bind(wx.EVT_MENU, self.OnCut, id=106)
        self.Bind(wx.EVT_MENU, self.OnCopy, id=107)
        self.Bind(wx.EVT_MENU, self.OnPaste, id=108)
        self.Bind(wx.EVT_MENU, self.OnDelete, id=109)
        self.Bind(wx.EVT_MENU, self.OnSelectAll, id=110)
        self.text = wx.TextCtrl(self, -1, '', (110,55),(120, -1))
        self.text = wx.TextCtrl(self, -1, '', (110,95),(120, -1))
        self.text.SetFocus()
        self.Centre()
        self.Show(True)
    def OnCut(self, event):
         self.text.Cut()
    def OnCopy(self, event):
         self.text.Copy()
    def OnPaste(self, event):
        self.text.Paste()
    def OnDelete(self, event):
        frm, to = self.text.GetSelection()
        self.text.Remove(frm, to)
    def OnSelectAll(self, event):
       self.text.SelectAll()

app = wx.App()
Editor(None, -1, 'Editor')
app.MainLoop() 

您需要知道从中剪切、复制或粘贴文本的wx.TextCtrl实例。在您提供的代码片段中,您尝试使用self.text进行初始化,但正如Velociraptors已经说过的,您对self.text进行了两次初始化,因此无法访问第一个按名称命名的wx.TextCtrl。因此,首先必须获得正在使用的wx.TextCtrl实例,然后使用它的方法。这可以通过wx.Frame.FindFocus()类来完成,该类在具有焦点的帧(或None)中返回小部件。

因此,对于Cut,我们得到这样的东西:

def OnCut(self, event):
    text = self.FindFocus()
    if text is not None:
        text.Cut()

其他方法也可以用同样的方式进行修改。

最新更新