我使用ListCtrl作为日志文件查看器,以便我可以隐藏普通用户的“调试”类型的列。我希望能够像许多其他网格类型的程序一样选择多个单元格,然后右键单击并说“复制”,然后将其粘贴到文本文档,电子邮件等中。希望能够选择任何连续单元格的分组,而不是仅限于整行。
有没有内置的功能可以帮助我?我怎么做到这一点?我应该切换到虚拟或终极ListCtrl吗?也许我应该使用其他一些wxPython类?
答案 0 :(得分: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表格)可能更合适。这个想法仍然只是收集列表项(或单元项)的部分不同。