2016-07-18 54 views
1

私は上司から理解の問題に直面しているというコードを持っています。私がに関して私のカーソルの現在の座標であることをここにxyを希望tkinterのカーソルの絶対位置を取得する

rect = create_rectangle(x, y, x + 10, y + 10, fill = 'blue', width = 0)

:として私は引数を与えているcreate_rectangle方法を使用して、私のカーソルがある四角形を描画したい/座標私のルートウィンドウ。

方法xyは、この関数に渡す前に私のコードである計算されます。

x = root.winfo_pointerx() - root.winfo_rootx() 
y = root.winfo_pointery() - root.winfo_rooty() 

そして、これが行われてきた理由を私は私の人生のために理解することはできません。私はちょうど

x = root.winfo_pointerx() 
y = root.winfo_pointery() 

をやってみましたし、また、単に

x = root.winfo_rootx() 
y = root.winfo_rooty() 

が、これらのいずれもカーソルがある四角形を描画します。私もドキュメントを調べてみましたが、実際に何が起こっているのか理解できません。

なぜx = root.winfo_pointerx() - root.winfo_rootx()y = root.winfo_pointery() - root.winfo_rooty()がここで行われますか?

+3

'winfo_pointer()' =画面上のカーソルの位置。 'winfo_root()' =画面上のウィンドウの位置。 'winfo_pointer() - winfo_root()' =ウィンドウ内のカーソルの位置。 –

答えて

3

絶対スクリーン相対マウスポインタの位置の違いについて質問しています。

表記:

x = root.winfo_pointerx() - root.winfo_rootx() 
y = root.winfo_pointery() - root.winfo_rooty() 

あなたwのルートウィンドウ比較的マウスポインタの座標を反映winfo_pointerx()及びw.winfo_pointery()(又はw.winfo_pointerxy())とは対照的に、マウスポインタの絶対位置を反映します。

しかし、絶対的および相対的な概念はどういう意味ですか?

winfo_rootx()およびwinfo_rooty()それぞれ、xおよびyがこのウィジェットの左上隅をルートウィンドウに返します。 しかし、これらのxy座標は、ノートパソコンの画面

winfo_pointerx()について算出し、winfo_pointery()ませSCREENに比較的メインルートのウィンドウにマウスポインタのx、y座標を返しています。あなたは、それ自体考慮してのみルートウィンドウを取っているが、あなたはが残り(SCREENを無視しているだけwinfo_pointerxy()実行して、だから、

しかし、問題は、あなたがルートウィンドウ上にマウスを移動すると、あなたのシステムがあなたのラップトップのSCREENに基づいて座標を算出していることを忘れてはならないということです。イベントの座標から利用して、他のアプローチでは

def get_absolute_position(event=None): 
    x = root.winfo_pointerx() - root.winfo_rootx() 
    y = root.winfo_pointery() - root.winfo_rooty() 
    return x, y 

:あなたはあなたの現在のコードを置き換えることができ

代替アプローチ

注シンプル

def get_absolute_position(event): 
    x = event.x 
    y = event.y 
    return x, y 
1


関連する問題