【问题标题】:wxPython ListCtrl copy to clipboardwxPython ListCtrl 复制到剪贴板
【发布时间】:2013-05-16 14:42:23
【问题描述】:

我使用 ListCtrl 作为日志文件查看器,这样我就可以对普通用户隐藏“调试”类型的列。我希望能够像在许多其他网格类型程序中一样选择多个单元格,然后右键单击并说“复制”,然后能够将其粘贴到文本文档、电子邮件等中。我希望能够选择任何一组连续的单元格,而不是仅限于整行。

有什么内置的东西可以为我做这件事吗?我将如何做到这一点?我应该切换到虚拟或终极 ListCtrl 吗?也许我应该使用其他一些 wxPython 类?

【问题讨论】:

  • 是的,我已经看过了,还有 Ultimate ListCtrl 和 Virtual。但这并没有告诉我方向。我注意到 TextCtrl 有一个“免费”的右键单击弹出窗口,因为它只是在我使用 ctrl 时出现。但是我没有使用 ListCtrl 获得免费赠品。此外,在 ListCtrl 中选择是基于行的,但我希望选择更像 wxGrid。也许使用 wxGrid 会让我更接近?但这仍然不能让我右键单击复制到剪贴板
  • wiki.wxpython.org/PopupMenuOnRightClick 展示了如何制作弹出菜单。如果您需要选择行和列,wxGrid 可能会更好。

标签: python wxpython listctrl


【解决方案1】:

一个工作示例:

import wx


class Frame(wx.Frame):

    def __init__(self):
        super(Frame, self).__init__(None, -1, "List copy test", size=(400, 500))

        panel = wx.Panel(self, -1)

        self.listCtrl = wx.ListCtrl(panel, -1, size=(200, 400), style=wx.LC_REPORT)
        self.listCtrl.InsertColumn(0, "Column 1", width=180)

        for i in xrange(10):
            self.listCtrl.InsertStringItem(i, "Item %d" % i)

        self.listCtrl.Bind(wx.EVT_RIGHT_UP, self.ShowPopup)


    def ShowPopup(self, event):
        menu = wx.Menu()
        menu.Append(1, "Copy selected items")
        menu.Bind(wx.EVT_MENU, self.CopyItems, id=1)
        self.PopupMenu(menu)


    def CopyItems(self, event):
        selectedItems = []
        for i in xrange(self.listCtrl.GetItemCount()):
            if self.listCtrl.IsSelected(i):
                selectedItems.append(self.listCtrl.GetItemText(i))

        clipdata = wx.TextDataObject()
        clipdata.SetText("\n".join(selectedItems))
        wx.TheClipboard.Open()
        wx.TheClipboard.SetData(clipdata)
        wx.TheClipboard.Close()

        print "Items are on the clipboard"


app = wx.App(redirect=False)
frame = Frame()
frame.Show()
app.MainLoop()

您提到了一个列表控件,但如果您想选择多个单元格,也许网格控件(类似 Excel 表格)可能更合适。这个想法仍然是相同的,只是收集列表项(或单元格项)的部分不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2013-04-07
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多