2012-01-23 4 views
1

textcrtlからtextcrtlまでのテキストを切り取り、貼り付け、コピーして選択します。誰でも私を助けてくれますか、私の心は何時間もスタックしています。あなたは、切り取り、コピーまたはどこのテキストを貼り付けるにするからwx.TextCtrlインスタンスを知る必要があり、以下のコードを、あなたの助けに感謝...wxpythonでは、1つのTextCtrlから別のTextCtrlにすべてのテキストをコピー、切り取り、貼り付け、選択します。

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

なぜTextCtrlを2回初期化するのですか? – Velociraptors

+0

その異なるTextCtrl、それらの位置を見てください – TLSK

答えて

2

を探してください。あなたが提供したコードスニペットでは、self.textでそれをやろうとしましたが、Velociraptorsがすでに述べたように、self.textを2回初期化したので、最初のwx.TextCtrlへのアクセスが失われました。したがって、まず作業するインスタンスwx.TextCtrlを取得してから、そのメソッドを使用する必要があります。これはwx.Frame.FindFocus()クラスで行うことができ、フォーカスを持つフレーム(またはNone)にウィジェットを返します。

だから、Cutのために我々はこのような何かを得る:

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

他の方法は、同じように変更することができます。

関連する問題