0

WarpPointerを適切に機能させるのに少し問題があります。私がやろうとしているシナリオは、ユーザーのクリックを記録してから画面上で再生することに似ています。画面の動きとクリックを問題なく記録することができました。しかし、ユーザーが録音したものを再生することになると、私はつまずきます。

def MoveCursorAndClick(self, e):
    # get the current screen position
    sp = self.GetPosition()
    p = self.getNextPosition() # returned in absolute x,y from screen rec
    self.WarpPointer(p.x - sp[0], p.y - sp[1])
    # wx.PostEvent(EVT_LEFT_DOWN, self.GetId())

WarpPointerは全画面ではなくウィンドウ内でのみ機能するように見えるため、明らかに上記のコードは正しくありません。機能しているウィンドウの調整をベースにしようとすると、Y方向に約50 pixずれているように見えるため、面倒です。私の現在の唯一の仮定は、これを必要以上に難しくしていることです。wxpythonの経験が浅いために、表示されない理由はもっとあります。

さらに、破壊されたPostEvent行は、別のウィンドウである場合とそうでない場合があるものにマウスクリックを送信するための正しいもののように見える、私がグーグルで検索した唯一のものです。それも正しい方向ですか?

更新 以下に述べるように、これを達成するための良いクロスプラットフォームの方法はありません。これが私がしたことです(インターネット上のさまざまな場所を見つけました):

def ClickScreenPositon(self, x, y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
4

3 に答える 3

3

wxPythonだけでこれを行うことはできないと思います。wx.Window.WarpPointer()は、あなたが発見したように、そのウィンドウによって制御される領域にのみマウスを移動できます。同様に、wx.EVT_LEFT_DOWNIDをウィンドウに設定しているため、呼び出しは機能しません。つまり、(x、y)でのクリックではなく、クリックされたウィンドウです。

少しグーグルした後、私はwxPythonでのユニットテストに関するこの記事を見つけました。これはGUIレベルでのテストについて簡単に説明しています。これはあなたがやろうとしていることではありませんが、概念的には似ています。彼らは、外部ライブラリを使用してインターフェイスを操作することを提案しています。このアプローチについて彼らが指摘する主な問題は、シミュレーションGUIインタラクション用のツールのほとんどが、企業ライセンスおよび/またはプラットフォームに依存していることです。

その記事は、Windowsシステムにpywinautoを使用することを提案しています。あなたの目的のために、pywinauto.controls.HwndWrapperはあなたが必要とするメソッドを持っているようです。MoveMouse()およびClick()。Windowsを使用していない場合、またはクロスプラットフォームのサポートが必要な場合は、さまざまなライブラリを調査する必要があります。

基本的に、pywinautoをインストールしてwxPythonアプリケーションにインポートし、wxPythonの代わりにそのメソッドを呼び出す必要があります。クロスプラットフォームの互換性が問題にならない限り、これが最も簡単で最良の解決策だと思います。

于 2012-06-12T05:09:43.017 に答える
1

wxPythonは、wxPythonで生成されたウィンドウ、フレーム、またはウィジェット上にある場合にのみカーソルを制御できます。wxPythonアプリケーションの範囲を離れると、マウスの制御が失われます。その時点でOSに接続する必要があります。Windowsでは、PyWin32パッケージがおそらく最善の策です。

画面のスクリーンショットを撮る方法を理解できれば、sikuliと呼ばれるかっこいい小さなプロジェクトも機能する可能性があります:http ://sikuli.org/

于 2012-06-12T13:34:33.723 に答える
0

Pythonwxwindowsでレコード再生メカニズムとして使用するオープンソースアプリケーションJW_Record_Playbackを作成しました。実際には、外部リソースとしてTK/TCLを使用します。Linuxでは正常に動作します(SuseとUbuntuの両方のディストリビューションでテスト済み)。

チェックしてください:http://members.home.nl/wijnenjl/Record_Playback_Python_TclTk_INI_Wx_EN_01.html

于 2012-06-20T08:21:13.113 に答える