使用虚拟的ListCtrl在wxPython复制和粘贴行(Copy and paste rows i

2019-10-17 07:06发布

我使用在wxPython一个虚拟的ListCtrl。 我想从列表中选择几行,然后复制/粘贴行值到一个文本文件,或者可能是电子表格。 我将如何复制选定行到剪贴板(使用CTRL-C)? 我应该绑定哪些事件? 谢谢!

Answer 1:

纵观wxPython的演示的列表控件,我想你可以做一些类似如下:

index = self.list.GetFirstSelected()
value = "      %s: %s\n" % (self.list.GetItemText(index), self.getColumnText(index, 1)))

你会需要的,如果你想使用CTRL-C,这意味着你会绑定到EVT_MENU,并把我在处理中提到的代码使用AcceleratorTable。 下面是在WX上Accerators教程: http://www.blog.pythonlibrary.org/2010/12/02/wxpython-keyboard-shortcuts-accelerators/

在另一方面,我几乎总是使用ObjectListView,而不是作为的ListCtrl它给了我,我觉得比用行和列的索引更容易获得大量的每一行的对象模型。 它需要一个稍微不同的方式和心态,但我认为这是值得的: http://www.blog.pythonlibrary.org/2009/12/23/wxpython-using-objectlistview-instead-of-a-listctrl/



Answer 2:

迈克对加速器的联系是非常有帮助。 伴随着这一点,我用pyperclip.copy()来完成我的复制操作。 由此,选择的内容被复制到剪贴板; 并且可以粘贴到任何文件。

希望它可以帮助别人..

import pyperclip 

def onKeyCombo(self, event):

    listSelectedLines =[]
    index = self.list.GetFirstSelected()  

    while index is not -1:
        listSelectedLines.append(self.list.GetItem(index, 1).GetText())
        index = self.list.GetNextSelected(index)             

    pyperclip.copy(''.join(listSelectedLines))


文章来源: Copy and paste rows in wxpython using a virtual ListCtrl