2016-08-24 3 views
1

마다 사용자가 응답해야 내 wxPython에 응용 프로그램은 CTRL-C, 기본적으로 내가 알고 싶은 등 다른 창에서 응용 프로그램 프레임/보이지만 초점을 흐리게 상단//을 최소한에있는 경우에 상관없이 안타 그 사용자는 CTRL-C 조합을 사용하여 무언가를 클립 보드에 복사했습니다 - 클립 보드에서 다른 변경 사항 (마우스 r- 클릭 + "복사"는 무시되어야 함)이 클립 보드에 복사 된 데이터를 사용하는 것보다. 그게 내가 pyHook을 사용하고 있고 모든 것이 괜찮은 것 같아서 ... "OnKeyboardEvent"내의 모든 코드는 CTRL-C가 "actuall job"(클립 보드에 복사하는 것)을 수행하기 전에 실행되는 것 같아서, 내가 친절 할 때마다 "한 단계 뒤로"의 :CTRL-C를 잡기 wxPython을 클립 보드 데이터를 조작

어떻게됩니까 :

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() 
:

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 할 ... :) 어쨌든

필요, 여기에 코드입니다

두 번째로 위의 코드가 잘못되었습니다 ... "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 

는 :

+0

하지만 사용 후 "복사"를 마우스 오른쪽 클릭을 사용하는 경우 (또한 콜백 다른 True 내가 예외 메시지를 많이 얻을 돌려 고정)? 어떻게 감지 할 수 있니? –

+0

나는 "클립 보드에서 CTRL-C의 변화"만에 intrested 해요 - 모든 – ttT

+0

wx.python가 자신의 클립 보드 기능을 가지고에서 마우스 사본이 감지되지 않습니다 : https://wxpython.org/docs/api/wx.Clipboard- class.html –

답변

1

/알아낼 걸 렸어요하지만했다 그것!

키 작동을 키 작동으로 변경하면 작동합니다. Ctrl + C를 놓으면 콜백이 호출되므로 CTRL + C가 처리 된 이후로 클립 보드가 이미 올바른 것입니다.

import wx 
import pyHook 
import win32clipboard 
import time 


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.KeyUp = self.OnKeyboardEvent # key up!! 
     hm.HookKeyboard() 


    def OnKeyboardEvent(self,event): 
     if event.Ascii == 3: 
      print("control c released") 
      win32clipboard.OpenClipboard() 
      clipboarditem = win32clipboard.GetClipboardData() 
      win32clipboard.CloseClipboard() 
      print("contents "+clipboarditem) 
      self.basicText.SetValue(clipboarditem) 
     return True 

app = wx.PySimpleApp() 
frame = TextFrame() 
frame.Show() 
app.MainLoop()