gpt4 book ai didi

python - wxPython ListCtrl 复制到剪贴板

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:02 24 4
gpt4 key购买 nike

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

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

最佳答案

一个工作示例:

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 工作表)可能更合适。这个想法仍然是相同的,只是收集列表项(或单元格项)的部分不同。

关于python - wxPython ListCtrl 复制到剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16676654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com