【发布时间】:2016-08-24 10:21:35
【问题描述】:
我的 wxpython 应用程序必须在每次用户点击 CTRL-C 时做出响应,无论应用程序框架是否在顶部/可见但未聚焦/最小化/在其他窗口下等。基本上我想知道用户使用 CTRL-C 将某些内容复制到剪贴板组合 - 剪贴板中的其他更改(如鼠标 r-click +“复制”应该被忽略),而不是将数据复制到剪贴板中。这就是为什么我使用 pyHook 并且一切似乎都很好,除了......“OnKeyboardEvent”中的所有代码似乎都是在 CTRL-C 完成其“实际工作”(将内容复制到剪贴板)之前执行的,所以每次我都很友善“退一步”:
会发生什么:
1. user hits CTRL-C
2. my "OnKeyboardEvent" code is executed
3. data is being copied to the clipboard (CTRL-C does its job)
我需要在 2 之前做 3........ :)
不管怎样,代码如下:
import wx
import pyHook
import win32clipboard
class TextFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Frame', size=(300, 100))
panel = wx.Panel(self, -1)
self.basicText = wx.TextCtrl(panel, -1, "", size=(175, -1))
self.basicText.SetValue("Press CTRL-C")
hm = pyHook.HookManager()
hm.KeyDown = self.OnKeyboardEvent
hm.HookKeyboard()
def OnKeyboardEvent(self,event):
if event.Ascii == 3:
win32clipboard.OpenClipboard()
clipboarditem = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
print clipboarditem
self.basicText.SetValue(clipboarditem)
app = wx.PySimpleApp()
frame = TextFrame()
frame.Show()
app.MainLoop()
上面代码的第二个问题...在“OnKeyboardEvent”过程的末尾看到这个“打印剪贴板项目”吗?如果我在下一个命令中删除它-“self.basicText.SetValue(clipboarditem)”停止工作并给出
line 23, in OnKeyboardEvent
self.basicText.SetValue(clipboarditem)
File "C:\Python27\lib\site-packages\wx-3.0-msw\wx\_core.py", line 13075, in SetValue
return _core_.TextEntryBase_SetValue(*args, **kwargs)
TypeError: an integer is required
这让我大吃一惊:/
【问题讨论】:
-
但是如果使用鼠标右键然后“复制”?您将如何检测到这一点?
-
我只对“剪贴板中的 CTRL-C 更改”感兴趣 - 根本不应该检测到鼠标副本
-
wx.python 自带剪贴板功能:wxpython.org/docs/api/wx.Clipboard-class.html