1
def stop(event):
    popup("Done")
    event.region.stopObserver()
    pass
wmp = App("C:\\Program Files\\Windows Media Player\\wmplayer")
wmp.open()
wait(2)
click(find(Pattern("play_button.png").exact()))
popup("Started Playing")
wait(3)
onAppear(Pattern("stop_button.png").exact(),stop)
observe(FOREVER)

上記のコード スニペットでは、Windows Media Player で mp3 ファイルを再生しようとしています。停止ボタンが表示されるまで観察すると、「完了」というポップアップ メッセージが表示されます。このプログラムを初めて実行すると、ポップアップ メッセージが 1 回表示されます。もう一度実行すると、ポップアップ メッセージが 2 回表示され、3 回目には 3 回表示されます。popup("Done")コードスニペットで1つしか与えていないのに、誰かがなぜそれが起こっているのか説明できますか??

4

3 に答える 3

1

私の環境では問題を再現できませんでしたが、説明に基づいて2つの提案があります。

  • 各テストの実行後に WMP ウィンドウを閉じます。おそらく、スクリプトは「stop_button.png」のすべての出現をループで探します。ただし、最初の出現が見つかった後、すぐに検索を停止することを期待しています( http://doc.sikuli.org/region.html#Region.onAppear )。

また

  • スクリプトを実行可能形式sklにエクスポートし、コマンド ライン ( http://doc.sikuli.org/faq/010-command-line.html ) を使用して実行します。Sikuli IDE が何かをキャッシュに保持しているのかもしれません (私は以前、いくつかの問題を抱えていました)。
于 2013-05-23T11:35:43.307 に答える
0
  1. パフォーマンスを向上させるには、onAppear リスナーを特定のリージョンに制限する必要があります

  2. プログラムを終了するときは、オブザーバーを停止する必要があります。 region.stopObserver()

  3. Sikuli docs によると、observe(background=True)代わりに使用する必要がありますobserve(FOREVER)

于 2013-05-31T09:41:32.300 に答える