Форум сайта python.su
Доброго времени суток, пишу банальную программу ее суть в том что я задаю квадрат на экране и при нажатии на кнопку программа делает скриншот и распознает текст затем выводит текст в лейбл. Задаются координаты при помощи двух кнопок: “1” и “2”, 1-задает верхний левый угол, 2я-правый нижний угол. Но столкнулся с проблемой что координаты не сохраняются. Подскажите пожалуйста как это исправить, не прошу за меня писать код, хотя бы подсказку в каком направлении смотреть. Код ниже:
from tkinter import *
import time
import numpy as np
import pyscreenshot as ImageGrab
import cv2
import pytesseract
import pyautogui
filename = ‘Image.png’
window = Tk()
window.title('штука')
window.geometry('250x125+900+100')
window.config(bg=“gray”)
window.resizable(width = False, height = False)
def cor_1():
time.sleep(2)
x1 = (pyautogui.position())
g = (x1)
y1 = (pyautogui.position())
y = (y1)
def cor_2():
time.sleep(2)
z1 = (pyautogui.position())
z = (z1)
c1 = (pyautogui.position())
c = (c1)
def chit_cof1():
x = 1
screen = np.array(ImageGrab.grab(bboxg, y, z, c)))
cv2.imwrite(filename, screen)
x = x + 1
img = cv2.imread('Image.png')
text = pytesseract.image_to_string(img)
label1 = text
label1 = Label(window, width=8, height=2)
label1.place(x=40, y=2)
btn1 = Button(window, bg='blue', fg='white', text='1', command=cor_1)
btn1.place(x=5, y=1)
btn2 = Button(window, bg='blue', fg='white', text='2', command=cor_2)
btn2.place(x=22, y=1)
btn5 = Button(window, bg='green', fg='white', text='ST', command=chit_cof1)
btn5.place(x=110, y=40)
window.mainloop()
Отредактировано ssalbs (Авг. 7, 2023 21:23:04)
Офлайн
Не корректно отображается код, а именно где в функциях cor_1 и cor_2 я беру то первое получаемое число то второе, по этому прикрепляю файл.
Прикреплённый файлы:
штука.txt (1,2 KБ)
Офлайн
ssalbsВыводи координаты в консоль через print(). Так ты узнаешь, меняются ли они вообще. Дальше тебе нужно будет наладить передачу значений переменных между функциями. Для этого обычно нужно использовать return внутри функции.
Подскажите пожалуйста как это исправить, не прошу за меня писать код, хотя бы подсказку в каком направлении смотреть.
Онлайн
Я вывожу в еще один лейбл для проверки и выводит отдельно координаты х и у. Его удалил из кода который выше для того что бы не путать людей у которых прошу совет.
Офлайн
return не помогает т.к. она работает только внутри функции.
Офлайн
def cor_1(): time.sleep(2) x1 = (pyautogui.position()) g = (x1) y1 = (pyautogui.position()) y = (y1)
def cor_1(): time.sleep(2) x1 = (pyautogui.position()) y1 = (pyautogui.position()) # Check it print(f"X1: {x1} Y1: {y1}") return x1,y1
Офлайн
g: 247 y: 299
z: 336 c: 317
в принт показывает координаты, но при нажатии на кнопку чтоб распознать текст пишет:
screen = np.array(ImageGrab.grab(bboxg, y, z, c)))
NameError: name ‘g’ is not defined
Офлайн
Нашлось решение.
def cor_1():
global g, y
time.sleep(2)
x1 = (pyautogui.position())
g = (x1)
y1 = (pyautogui.position())
y = (y1)
return g, y
Офлайн
Приучай себя работать правильно - вначале создаешь структуру данны
from dataclasses import dataclass @dataclass class Coords: g: int = 0 y: int = 0 z: int = 0 c: int = 0 crds = Coords()
crds.g = 10 crds.y = 11 crds.z = 12 crds.c = 13
print(crds.g) print(crds)
Отредактировано ZerG (Авг. 8, 2023 19:51:04)
Офлайн