मैं एक अध्ययन खेल बनाने का प्रयास कर रहा हूं जहां एक प्रश्न नीचे की ओर गिरेगा और आप उत्तर टाइप करेंगे, हालांकि मुझे समझ में नहीं आता कि निचले प्रश्न की गति को रोके बिना मुख्य इनपुट कैसे रिकॉर्ड करें।

सीधे शब्दों में कहें तो, मैं प्रश्न को कम करने में सक्षम होना चाहता हूं और गति को रोकने के बिना एक ही समय में इनपुट करने के लिए अपने कीबोर्ड का उपयोग करना चाहता हूं।

text_letter = 0

def text_insert(answer):
    global text_letter
    print("hello")
    text_letter += 1

def text_lower(question,answer):
    global text_letter
    text.penup()
    text.goto(random.randint(-250,250),355)
    text.pendown()
    text.color("white")
    text.write("Start", font=("Arial", 20, "normal"))
    x,y = text.pos()
    delay = .01
    wn.textinput("Answer", "Answer:")  
    turtle.listen()
    turtle.onkey(text_insert(answer),answer[text_letter])
    while y > -355:
        time.sleep(delay)
        y -= 1
        text.goto(x,y)
        text.write(question, font=("Arial", 20, "normal"))
        text.clear()
1
Silken Stream 25 नवम्बर 2019, 08:40

1 उत्तर

यह आपके अनुमान से अधिक जटिल उत्तर हो सकता है: यदि आप कछुए के onkeypress() फ़ंक्शन के लिए दूसरे, key, तर्क को छोड़ देते हैं, तो यह आपके कुंजी प्रेस हैंडलर कोड को किसी भी पर कॉल करेगा। एम> कुंजी दबाई जाती है। यह आपको बस यह नहीं बताएगा कि कौन सी कुंजी!

हम टिंकर के event.char को कछुए के ईवेंट हैंडलर को पास करने के लिए अंतर्निहित कोड को फिर से लिखकर इस खराब डिज़ाइन के आसपास काम कर सकते हैं, जहां कोई कुंजी सेट नहीं की गई है।

एक बार यह हो जाने के बाद, हम विंडो के ऊपर से प्रश्न को कम करने के लिए टर्टल टाइम इवेंट का उपयोग कर सकते हैं, जबकि उपयोगकर्ता का टाइप किया गया इनपुट विंडो के नीचे दिखाई देता है।

शुरू करने में आपकी सहायता के लिए यहां मेरा एक प्रश्न अनुकरण है:

from turtle import Screen, Turtle
from functools import partial

FONT_SIZE = 20
FONT = ("Arial", FONT_SIZE, "normal")

def text_lower(question):
    question_turtle.forward(1)
    question_turtle.clear()
    question_turtle.write(question, align="center", font=FONT)
    screen.update()

    if question_turtle.ycor() - answer_turtle.ycor() > FONT_SIZE:
        screen.ontimer(lambda: text_lower(question), 15)
    else:
        question_turtle.clear()

def _onkeypress(self, fun, key=None):
    if fun is None:
        if key is None:
            self.cv.unbind("<KeyPress>", None)
        else:
            self.cv.unbind("<KeyPress-%s>" % key, None)
    else:
        if key is None:
            def eventfun(event):
                fun(event.char)
            self.cv.bind("<KeyPress>", eventfun)
        else:
            def eventfun(event):
                fun()
            self.cv.bind("<KeyPress-%s>" % key, eventfun)

def display_character(character):
    global answer

    if not character:
        return

    if ord(character) == 13:
        answer_turtle.clear()
        answer_turtle.setx(0)
        # do something with answer and then:
        answer = ""
    else:
        answer += character
        answer_turtle.write(character, move=True, font=FONT)

    screen.update()

screen = Screen()
screen.tracer(False)
screen._onkeypress = partial(_onkeypress, screen)

question_turtle = Turtle(visible=False)
question_turtle.penup()
question_turtle.setheading(270)
question_turtle.sety(screen.window_height()/2 - FONT_SIZE)

answer_turtle = Turtle(visible=False)
answer_turtle.penup()
answer_turtle.sety(FONT_SIZE - screen.window_height()/2)

answer = ""

screen.onkeypress(display_character)
screen.listen()

text_lower("What is the air-speed velocity of an unladen swallow?")  # A: An African or European swallow?

screen.mainloop()
1
cdlane 28 नवम्बर 2019, 07:22
शुक्रिया! मैं एक अलग समाधान आया जहां मैं एक टिंकर एंट्री बॉक्स बनाता हूं और हर फ्रेम पर बॉक्स में टेक्स्ट को लगातार पुनर्प्राप्त करता हूं और यदि सामग्री उत्तर से मेल खाती है तो यह लूप तोड़ देगी ... उसने कहा कि मैं इस समाधान के साथ गड़बड़ कर रहा हूं और है कुछ बेहतरीन परिणाम मिले।
 – 
Silken Stream
29 नवम्बर 2019, 02:28