0

Calico IDE で Graphics および Myro パッケージを使用していますが、'q' キーを押してプログラムを終了させる方法を誰か教えてもらえますか? 現在、「q」キーを押すと、ウィンドウでマウスをクリックして終了する必要があります。

def main():
    win = Window(800,500)
    bg = Picture("http://www.libremap.org/data/boundary/united_states/contig_us_utm_zone_14_600px.png")
    bg.draw(win)
    while True:
        char = win.getKeyPressed()
        if char == 'q':
            win.close()
            break
        x, y = win.getMouse()
        MPO = Rectangle(Point(x,y), Point(x+10,y+10))
        MPO.fill = Color("white")
        MPO.draw(win)
4

1 に答える 1

1

Calico のことは聞いたことがありませんが、ドキュメントを 5 秒で見ると、次のように表示されます。

getMouse() - ユーザーがクリックしてウィンドウ内の位置の (x, y) を返すまで待機します

したがって、Q キーを押して効果を得る前にウィンドウをクリックする必要があるのは、これが理由であるとgetMouse()確信しています。

ドキュメントでこれが説明されていなくても、印刷/ロギングを追加したり、デバッガーで実行したりすることで、キープレスに応答しないときにどこが動かなくなっているかを確認することで、おそらくすぐに理解できるでしょう。

たとえば、これを行うための簡単で汚い方法は次のとおりです。

while True:
    print 'Before getKeyPressed'
    char = win.getKeyPressed()
    print 'After getKeyPressed, got', char
    if char == 'q':
        print 'About to close because of q'
        win.close()
        print 'Closed'
        break
    print 'Before getMouse'
    x, y = win.getMouse()
    print 'After getMouse, got', x, y

… 等々。

もちろん、実際には、コードのすべての行に print ステートメントを追加する必要はありません。(そして、それが必要な場合、それらすべての行を手動で記述するよりもスマートな方法でインストルメント化する必要があります。)ただし、いくつか追加して一般的な領域に絞り込み、ズームインしてその領域内にさらにいくつか追加することができます。など、犯人が見つかるまで。

一方、コードをgetMouseNow()の代わりに使用するように変更getMouse()すると、問題は解決しますが、何かを行ったかどうかに関係なく、ビジーループとウィンドウの再描画をできるだけ速く繰り返すことによってのみです。

ここで本当に必要なのは、他の GUI アプリと同様に、イベント ループです。onMouseDownとという関数があることがわかりonKeyPressます。これは、ここで必要なものとまったく同じように見えます。

于 2013-01-02T23:54:00.963 に答える