В clipboard
есть ошибка, по крайней мере, в Linux в wx 4.0.3
Если вы определите свой собственный wx.Clipboard
и используете его, вы получите следующее сообщение об ошибке:
/home/vagrant/wxPython-4.0.3/ext/wxWidgets/src/gtk/clipbrd.cpp(91): assert "clipboard == ms_clipboard" failed in OnDone(): got notification for alien clipboard
В сообщении указывается, что платформа Linux не принимается во внимание, т. Е. Ссылка на ms_clipboard
Однако, если вы используете wx.TheClipboard
, он работает хорошо, т.е.
import wx
import wx.stc as stc
class Window(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(500, 500))
self.control = stc.StyledTextCtrl(self, style=wx.TE_MULTILINE | wx.TE_WORDWRAP)
self.EditMenu()
self.BindsMenu()
self.MenuBar()
def EditMenu(self):
self.editmenu = wx.Menu()
self.copy_clipboard = self.editmenu.Append(wx.ID_ANY, "&Copy to Clipboard", "Copy to clipboard")
self.clear_clipboard = self.editmenu.Append(wx.ID_ANY, "C&lear Clipboard", "Clear clipboard")
self.paste_clipboard = self.editmenu.Append(wx.ID_ANY, "&Paste Clipboard", "Paste clipboard")
def MenuBar(self):
self.menu = wx.MenuBar()
self.menu.Append(self.editmenu, "&Edit")
self.SetMenuBar(self.menu)
def BindsMenu(self):
self.Bind(wx.EVT_MENU, self.CopyClipboard, self.copy_clipboard)
self.Bind(wx.EVT_MENU, self.ClearClipboard, self.clear_clipboard)
self.Bind(wx.EVT_MENU, self.PasteClipboard, self.paste_clipboard)
def ClearClipboard(self, e):
wx.TheClipboard.Open()
wx.TheClipboard.Clear()
wx.TheClipboard.Close()
def CopyClipboard(self, e):
clipdata = wx.TextDataObject()
copy_data = self.control.GetSelectedText()
if copy_data:
clipdata.SetText(copy_data)
wx.TheClipboard.Open()
wx.TheClipboard.SetData(clipdata)
wx.TheClipboard.Close()
def PasteClipboard(self, e):
clipdata = wx.TextDataObject()
wx.TheClipboard.Open()
wx.TheClipboard.GetData(clipdata)
wx.TheClipboard.Close()
self.control.AddText(clipdata.GetText())
def main():
app = wx.App()
frame = Window(None, "Text Editor")
frame.Show()
app.MainLoop()
if __name__ == '__main__':
main()