2
我正在开发一个带有多个TextCtrl和ComboBox小部件的小应用程序。我希望当我按下Ctrl-C Ctrl-V和Ctrl-X键时,我会在正确的条目中获得复制,粘贴和剪切的通常行为。wxpython剪切复制和粘贴整个应用程序
我现在得到的是,虽然我可以右键单击并使文本copd/past/cutd,但我无法通过键绑定或菜单条目。我怎样才能以简单的方式获得这个?
我正在开发一个带有多个TextCtrl和ComboBox小部件的小应用程序。我希望当我按下Ctrl-C Ctrl-V和Ctrl-X键时,我会在正确的条目中获得复制,粘贴和剪切的通常行为。wxpython剪切复制和粘贴整个应用程序
我现在得到的是,虽然我可以右键单击并使文本copd/past/cutd,但我无法通过键绑定或菜单条目。我怎样才能以简单的方式获得这个?
菜单键绑定默认使用Alt-first_menu_letter - > submenu_first_letter。
所选项目的菜单事件应绑定相应的事件处理程序:
self.Bind(wx.EVT_MENU, self.on_copy, self.copy)
的复制方法,您首先选择要使用鼠标复制的文本。然后你就可以得到集中的小部件(与要复制的选择字符串的具体textcontrol)有:
widget = self.FindFocus()
这样
现在你可以从该插件的选择的字符串:
self.copied = widget.GetStringSelection()
对于将复制的文本粘贴到位于光标所在的文本控件中,也必须执行相同的操作。 在这里你有一个工作的例子:
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.tctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
self.tctrl_2 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
self.menubar = wx.MenuBar()
self.test = wx.Menu()
self.copy = wx.MenuItem(self.test, wx.NewId(), "copy", "is_going to copy", wx.ITEM_NORMAL)
self.test.AppendItem(self.copy)
self.paste = wx.MenuItem(self.test, wx.NewId(), "paste", "will paste", wx.ITEM_NORMAL)
self.test.AppendItem(self.paste)
self.menubar.Append(self.test, "Test")
self.SetMenuBar(self.menubar)
self.__set_properties()
self.__do_layout()
self.Bind(wx.EVT_MENU, self.on_copy, self.copy)
self.Bind(wx.EVT_MENU, self.on_paste, self.paste)
def __set_properties(self):
self.SetTitle("frame_1")
def __do_layout(self):
sizer_1 = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
sizer_2.Add(self.tctrl_1, 1, wx.EXPAND, 0)
sizer_2.Add(self.tctrl_2, 1, wx.EXPAND, 0)
sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
self.SetSizer(sizer_1)
sizer_1.Fit(self)
self.Layout()
def on_copy(self, event):
widget = self.FindFocus()
self.copied = widget.GetStringSelection()
def on_paste(self, event):
widget = self.FindFocus()
widget.WriteText(self.copied)
if __name__ == "__main__":
app = wx.PySimpleApp(0)
frame = MyFrame(None, -1, "")
frame.Show()
app.MainLoop()
完美的作品!谢谢 – pygabriel