1

大規模なプロジェクトの一環として、Mac OS X スナップショットと同様に機能するスナップショット ツールを作成しようとしています。1 回目のクリックと 2 回目のクリックで、正方形によって作成された領域の画像が返されます。

最初のポイント(x、y)と2番目のポイント(x、y)を取り、それらのポイントがスクリーンショット上に作成する正方形のスナップショットを作成するPython関数がいくつかあります。欠落している部分は、最初のクリックと 2 回目のクリックのマウス位置を取得し、そのデータを python プログラムに渡してスナップショットを作成することです。

つまり、プログラムの流れは次のようになります。

  1. 最初のクリック (x、y を保存)
  2. 2 回目のクリック (x2、y2 を保存)
  3. 保存されたクリックされたデータを使用してsnapshot.pyを実行し、スクリーンショットを返します

フレーム内のポインターの位置を返すことができるソリューションしか見つかりませんでした。それが役立つ場合は、「import gtk」と「from Xlib import display」を使用しています

編集: Tkinter を使用して、画面全体を覆う非表示のフレームを作成しようとしました。アイデアは、その目に見えないフレームを使用して 2 回のマウス クリックの正確な座標を取得することでした。その後、目に見えないフレームが消え、座標がスクリーンショット関数に渡され、それが実行されます。しかし、私が書いてきたコードはフレームを透明に保ちません。

編集 2: このコードは、ウィンドウを作成し、透明にし、画面に合わせてサイズを変更し、そのウィンドウのマウス座標を返すことができます。これを使用して、2 回のクリックでマウスの座標を返すだけで、ウィンドウを削除して、それらの座標をスナップショット コードに送信できます。Pythonシェルで以下のコードを1行ずつ実行すると、完全に機能します。ただし、コード全体を実行すると、ウィンドウを透明にする部分がスキップされるようです。「attributes("-alpha", 0.1)」を含むコード ブロックをコピーして Python シェルに貼り付けても、その行は無視されます。

from Tkinter import *

root = Tk()
root.attributes('-alpha', 0.1)

maxW = root.winfo_screenwidth()
maxH = root.winfo_screenheight()

root.geometry("{0}x{1}+0+0".format(maxW, maxH))

def callback(event):
    print "clicked at: ", event.x, "and: ", event.y

root.bind("<Button-1>", callback)

def Exit(event):
    root.destroy()
root.bind("<Escape>", Exit)


# root.overrideredirect(True)

root.mainloop()

私は、クリックでマウスの座標を返すために、任意の c または c++ コード、または任意の言語のコードを使用することにオープンです。この男は、特定のポイントでコンピューターをクリックするように実際にコードを書きました。これは、私の問題と同じ軌道に乗っている可能性があります。

4

1 に答える 1

1

これは単なるインデントの問題です - 誤ってコールバックでコールバックをバインドしました - 代わりにこれを試してください:

root.geometry("{0}x{1}+0+0".format(maxW, maxH))

def callback(event):
    print "clicked at: ", event.x, "and: ", event.y

root.bind("<Button-1>", callback)

編集

わかりました、ここに理論があります-コマンドラインから実行すると、何らかの理由でルートウィンドウが表示されるまでに時間がかかるため、存在する前にアルファを設定すると、アルファオプションが無視されます。これを試してください:

root.wait_visibility(root)
root.attributes('-alpha', 0.1)
于 2013-08-13T13:50:33.733 に答える