문제

저는 Simon Says를 Python으로 구현하기 위한 숙제를 시도하고 있습니다.거북이 라이브러리(요구 사항)를 사용하여 이를 수행하려고 합니다.

그러나 클릭 이벤트를 등록하는 화면을 얻을 수 있지만(현재는 x, y 좌표만 인쇄함) 클릭 이벤트를 기다리도록 할 수 없다는 점에서 걸림돌에 부딪혔습니다.

특히 제가 계획하고 있는 것은 사용자가 해당 위치 내에서 클릭하면 버튼을 클릭한 것처럼 간주되는 영역을 화면에 두는 것입니다.화면이 지워지고 게임이 무엇이든 수행합니다.

그러나 작동하는 '버튼'을 얻으려는 실험에서는 x, y 좌표를 인쇄하도록 설정하고 나머지 프로그램은 완료됩니다.사용자가 아무 것도 클릭할 때까지 기다리지 않았습니다.차단방법을 시도해봤는데..

while clicked == False:
    pass

또는

while clicked == False:
    time.sleep(1)

하지만 두 가지 방법 모두 수동으로 중단할 때까지 프로그램을 중단한 다음 클릭을 인쇄합니다.

어딘가에 옵션이 없나요?

도움이 되었습니까?

해결책 2

광범위한 탐색 후 거북이를 사용하여 일부 클릭 이벤트를 기다리기 위해 거북이를 사용하는 동안 파이썬에서 코드를 일시 중지 할 수있는 방법이 반드시 없습니다.어쩌면 TK에서 나는 그 일을 할 수 있지만 거북이가 아닙니다.

그러나 그 주위를 둘러 볼 수있는 방법이 있습니다.예로서.메서드는 화면에서 가짜 버튼을 설정하고 클릭 이벤트를 설정하고 종료합니다.클릭 한 클릭 이벤트는 실행에 필요한 다음 방법을 호출합니다.따라서 버튼을 클릭 할 때까지 실제 코드는 아무 것도하지 않고 사용하기 위해 메모리에 남아 있습니다.

너무 구체적으로. 1. '버튼'을 만듭니다. 2. 클릭 이벤트를 기다릴 때까지 프로그램이 정상적으로 작동하게하십시오. 3. '버튼'을 클릭하면 코드의 다음 부분을 클릭하면 "버튼 '을 클릭하면 화면을 설정하십시오 (또는 거북이)을 설정하십시오.

특수 메모.문제의 코드는 나중에 코드에서 클릭 이벤트를 기다리는 것에 의존 할 수 없습니다.대신 클릭하면 코드 실행의 다음 부분이 발생합니다.

다른 팁

거북이에는 버튼이 없지만 클릭에 대한 콜백이 있습니다.또한, 당신은 사용해야합니다 onclick ~을 위한 Screen 일반적인 클릭을 감지하고 onclick ~을 위한 turtle 거북이의 클릭을 감지합니다.예를 들어, 동적 모양을 사용하여 다양한 색상의 큰 거북이 4개를 만들 수 있습니다.

또한 거북이는 Tk를 기반으로 하므로 다음과 같은 사항을 알고 있어야 합니다. mainloop()

다음 프로그램은 Python 2.7.5에 대한 몇 가지 힌트를 제공합니다.

import turtle as t
from random import randint

class MyTurtle(t.Turtle) :

    def __init__(self,**args) :
        t.Turtle.__init__(self,**args)

    def mygoto(self,x,y) :
        t1.goto(x,y)
        print x,y

    def randonics(self,x,y) :
        self.left(randint(90,270))

def minegoto(x,y) :
    print x,y
    t1.goto(x,y)

wt=t.Screen()
t1=MyTurtle()
wt.register_shape("big",((0,0),(30,0),(30,30),(0,30)))
t1.shape("big")
wt.onclick(t1.mygoto,btn=1)
wt.onclick(minegoto,btn=2)
t1.onclick(t1.randonics,btn=3)
t1.goto(100,100)

t.mainloop()

onClick ()에 등록 된 함수가 x, y 위치를 테스트 할 수 있습니다.그것이 어떤 지역의 내부에있는 경우 당신이해야 할 일을하는 일을합니다.

나는 당신이하고 싶은 것과이 코드의 차이점을 보지 못하고, 거북이 위치의 수정은 예를 들어, onclick ()에 의해 캡처되는 클릭, 스레드를 시작할 때 아무 것도 할 수 있습니다.당신이 정말로 그것을 필요로하는 경우 ( 파이썬 에서 스레드 생성

import turtle as t
from random import randint
from threading import Thread
from time import sleep

def threaded_function(arg,t1):
    for i in range(arg):
        print "running",i
        sleep(1)
        t1.forward(i*10)



def minegoto(x,y) :
    print x,y
    t1.goto(x,y)
    thread = Thread(target = threaded_function, args = (10,t1 ))
    thread.start()
    thread.join()
    print "thread finished...exiting"

wt=t.Screen()
t1=t.Turtle()
wt.register_shape("big",((0,0),(30,0),(30,30),(0,30)))
t1.shape("big")
wt.onclick(minegoto,btn=1)
t1.goto(100,100)

t.mainloop()
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top