我想剪切,粘贴,复制和选择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, '&Cut\tCtrl+X', 'Cut the Selection')
edit.AppendItem(cut)
copy = wx.MenuItem(edit, 107, '&Copy\tCtrl+C', 'Copy the Selection')
edit.AppendItem(copy)
paste = wx.MenuItem(edit, 108, '&Paste\tCtrl+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 &All\tCtrl+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()
答案 0 :(得分:2)
您需要知道要剪切,复制或粘贴文本的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()
其他方法可以用同样的方法修改。