2011-11-07 7 views
1

マウスの位置を追跡し、小さなウィンドウに表示したいと思います。PythonでMousepositionを表示

#! /usr/bin/python 

from Tkinter import * 
from Xlib import display 

def mousepos(): 
    data = display.Display().screen().root.query_pointer()._data 
    return data["root_x"], data["root_y"] 

root = Tk() 
strl = "mouse at {0}".format(mousepos()) 
lab = Label(root,text=strl) 
lab.pack() 
root.title("Mouseposition") 

root.mainloop() 

この小さなスクリプトは、起動時にマウスの位置を示すが、マウスの動きでそれを更新しません。そのために は、私は、コードのこの部分を作成しました。私はそれの後ろにいません(私はPythonには新しかったと言いましたか?)。 マウスが動いているときにスクリプトに伝えるイベントをXlibから使用する必要があると思います...

マウスの位置を更新するにはどうすればよいですか?

答えて

2
  1. root.afterを使用して、updateを定期的に呼び出します。
  2. strl = tk.StringVar()およびtk.Label(...,textvariable=strl)〜 を使用して、ラベルテキストを変更できます。
  3. strl.set()を呼び出してラベルテキストを変更します。
  4. 関数呼び出しの長鎖のほとんどがmouseposが呼び出されるたびに繰り返さ されないようにdisplay.Display().screen().rootに等しいscreenrootのデフォルト値はmouseposに を追加しました。引き数なしでmousepos()を呼び出すと、通常通り動作します。

import Tkinter as tk 
import Xlib.display as display 

def mousepos(screenroot=display.Display().screen().root): 
    pointer = screenroot.query_pointer() 
    data = pointer._data 
    return data["root_x"], data["root_y"] 

def update(): 
    strl.set("mouse at {0}".format(mousepos())) 
    root.after(100, update) 

root = tk.Tk() 
strl = tk.StringVar() 
lab = tk.Label(root,textvariable=strl) 
lab.pack() 
root.after(100, update) 
root.title("Mouseposition") 
root.mainloop() 
+0

パーフェクト!その窓を前景に保つための手技はありますか? – wullxz

+0

おそらくありますが、そのトリックは分かりません。これは、おそらくウィンドウマネージャやOSに依存します。 [this](http://stackoverflow.com/questions/4066359/tkinter-window-layering/4068618#4068618)によると、tk/tclの中で確実に行う方法はありません。 [this](http://www.daniweb.com/software-development/python/threads/42766/204393#post204393)によれば、Windowsで 'root.wm_attributes(" - topmost "、1 ) '。 – unutbu

+1

あなたの素晴らしい助けをありがとう:)私はdebian 6.0とgnome btwを使用しています。あなたがその窓を一番上に置くためにどんなトリックを覚えているなら、それについて私に教えることをためらってください:) – wullxz

関連する問題