私のwxpythonアプリケーションは、アプリケーションのフレームが上にあるかどうかにかかわらずCTRL-Cを押すたびに応答する必要があります。そのユーザーはCTRL-Cの組み合わせを使用して何かをクリップボードにコピーしました - クリップボードにコピーされたデータを使用するよりもクリップボードの他の変更(マウスのr-クリック+ "コピー"は無視する必要があります)だからこそ私はpyHookを使用していますが、すべてがうまくいくようです...「OnKeyboardEvent」内のすべてのコードは、CTRL-Cが「アクロバールジョブ」(クリップボードにコピーする)の前に実行されているようです。wxpythonを使ってCTRL-Cを捕まえてクリップボードのデータを操作する
何が起こる:
私は2.の前に3を実行する必要があり1. user hits CTRL-C
2. my "OnKeyboardEvent" code is executed
3. data is being copied to the clipboard (CTRL-C does its job)
を.... :)とにかく
、ここでのコードだ:
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()
"バック一歩" の
第2位上のコードで間違っています... "OnKeyboardEvent"プロシージャの最後にあるこの "print clipboarditem"を参照してください。私は、次のコマンドを削除した場合 - 「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
を与える:/
(また、コールバックが、私は例外メッセージの多くを得る他
True
を返さ固定)が、使用は、マウスの右クリックを使用している場合は、次に「コピー」?どのようにそれを検出するのですか? –私は「クリップボードのCTRL-Cの変更」でのみintrestedです - マウスコピーは全く検出されません – ttT
wx.pythonは独自のクリップボード機能を持っています:https://wxpython.org/docs/api/wx.Clipboard- class.html –