0
win=GraphWin("test",410,505)

while win.checkMouse==None:
    rectangle=Rectangle(Point(100,100),Point(300,300))
    rectangle.draw(win)
    rectangle.undraw()
coordinate=win.checkMouse()

座標はなしを出力し続けます。win.checkMouse()ウィンドウが押されたときの座標を取得するにはどうすればよいですか?

4

2 に答える 2

1
win=GraphWin("test",410,505)

coordinate = win.checkMouse()
while coordinate == None:
    rectangle=Rectangle(Point(100,100),Point(300,300))
    rectangle.draw(win)
    rectangle.undraw()
    coordinate = win.checkMouse()
print coordinate

これを試して。

checkMouse() 関数は、最後のマウス クリックを返すか、最後の呼び出し以降にマウスがクリックされていない場合は None を返します。そのため、while ループを終了するときに、クリックされた値を None にします。

于 2016-11-17T13:07:23.080 に答える
0

()あなたは最初に忘れたwin.checkMouse()

あなたの例では、最初のクリック(および座標)が最初win.checkMouse()whileループでキャッチされるため、2回クリックする必要があります。2 回目のクリックはcoordinate = win.checkMouse()

from graphics import *
import time

win = GraphWin("test", 410, 505)

while not win.checkMouse():
    rectangle = Rectangle(Point(100, 100), Point(300, 300))
    rectangle.draw(win)
    rectangle.undraw()

# time for second click
time.sleep(2)

coordinate = win.checkMouse()
print("coordinate:", coordinate)

win.close()

編集:なしの例sleep()

from graphics import *

win = GraphWin("test", 410, 505)

rectangle = Rectangle(Point(100, 100), Point(300, 300))
rectangle.draw(win)

while True:
    coordinate = win.checkMouse()
    if coordinate:
        print("coordinate:", coordinate)
        break

win.close()

EDIT:マウスボタンへのバインド機能

from graphics import *

# --- functions ---

def on_click_left_button(event):
    x = event.x
    y = event.y
    rectangle = Rectangle(Point(x, y), Point(x+100, y+100))
    rectangle.draw(win)

def on_click_right_button(event):
    win.close()
    win.quit()

# --- main ---

win = GraphWin("test", 410, 505)

win.bind('<Button-1>', on_click_left_button)
win.bind('<Button-3>', on_click_right_button)

win.mainloop()
于 2016-11-17T12:05:24.517 に答える