1

I'm not sure how I could get my ans_label to access my ans_string as it is defined within the function ssInterpret().

def ssInterpret():
    #region=(x, y, width, height)
    time.sleep(5)
    myScreenshot = pyautogui.screenshot(region=(400, 320, 800, 500))
    myScreenshot.save(imgPath)

    #reads the image

    img = cv2.imread(imgPath)
    text = pytesseract.image_to_string(img)

    q = text

    #completes the answer search

    results = brainlypy.search(q)
    question = results.questions[0]
    print('URL: '+'https://brainly.com/task/'+str(question.databaseid))
    print('QUESTION:',question)
    print('ANSWER 1:', question.answers[0])
    if question.answers_count == 2:
        print('ANSWER 2:', question.answers[1])

    ans_string = str(question.answers[0])

answer_label = Label(root, text=ans_string)
2
  • 1
    You can use global variable to do this. Commented Jun 4, 2022 at 21:32
  • 2
    Your current code never even calls ssInterpret, so that code is never going to run. Commented Jun 4, 2022 at 21:34

2 Answers 2

1

First, your function needs to return the answer:

def ssInterpret():
    ...  # most of function elided.
    return ans_string

#then call the function 
ans = ssInterpret()
answer_label = Label(root, text=ans)
Sign up to request clarification or add additional context in comments.

Comments

1

Initialize ans_string as ans_string = "" at the top of your code. Then add a line global ans_string prior to ans_string = str(question.answers[0]) inside the function ssInterpret(). Call ssInterpret() before answer_label = Label(root, text=ans_string). Your code should now work as expected.

Complete code with modification:

ans_string = ""

def ssInterpret():
    #region=(x, y, width, height)
    time.sleep(5)
    myScreenshot = pyautogui.screenshot(region=(400, 320, 800, 500))
    myScreenshot.save(imgPath)

    #reads the image

    img = cv2.imread(imgPath)
    text = pytesseract.image_to_string(img)

    q = text

    #completes the answer search

    results = brainlypy.search(q)
    question = results.questions[0]
    print('URL: '+'https://brainly.com/task/'+str(question.databaseid))
    print('QUESTION:',question)
    print('ANSWER 1:', question.answers[0])
    if question.answers_count == 2:
        print('ANSWER 2:', question.answers[1])

    global ans_string
    ans_string = str(question.answers[0])

ssInterpret()
answer_label = Label(root, text=ans_string)

2 Comments

Nooooo! Avoiding global variables is easy in this case: just return the string.
Yeah of course, that's one way of doing it :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.