Предисловие:
Возможно я делаю все через одно место? И есть другой вариант постоянно снимать изображение игры с дальней шей обработкой и выводом в окошко обработанного изображения? Вроде еще есть PyQT - проще будет сделать? С питоном не знаком, пишу код по документации библиотек в интернете.
******
Задача - сделать скрин области экрана с игрой, поместить его в переменную для дальнейших действий в OpenCV и отобразить эт изображение в окне TkInter.
Инклуды:
from Tkinter import *
import cv2 as cv
import win32gui
from PIL import ImageOps, Image, ImageGrab, ImageTk
from numpy import *
Получаем изображение (основная функция get_screen, результат функции отлично обрабатывается библиотекой OpenCV без ошибок:
WINDOW_SUBSTRING="Game Window Name"
def set_window_coordinates(hwnd, window_info):
if win32gui.IsWindowVisible(hwnd):
if WINDOW_SUBSTRING in win32gui.GetWindowText(hwnd):
rect = win32gui.GetWindowRect(hwnd)
x = rect[0]
y = rect[1]
w = rect[2] - x
h = rect[3] - y
window_info['x'] = x
window_info['y'] = y
window_info['width'] = w
window_info['height'] = h
window_info['name'] = win32gui.GetWindowText(hwnd)
win32gui.SetForegroundWindow(hwnd)
def get_screen(x1, y1, x2, y2):
box = (x1 + 8, y1 + 30, x2 - 8, y2)
screen = ImageGrab.grab(box)
img = array(screen.getdata(), dtype=uint8).reshape((screen.size[1], screen.size[0], 3))
return img
def get_window_info():
# set window info
window_info = {}
win32gui.EnumWindows(set_window_coordinates, window_info)
return window_info
Создаем интерфейс и грузим в него картинку:
def loop():
window_info = get_window_info()
root = Tk()
root.title("GUI on Python")
img = get_screen(
window_info["x"],
window_info["y"],
window_info["x"] + window_info["width"],
window_info["y"] + window_info["height"]
)
root.geometry(str(window_info["width"]) + "x" + str(window_info["height"]))
#print img
photo = PhotoImage(image=img) # - тут выдается ошибка
#btn = Button(text="Click Me", background="#555", foreground="#ccc",
# padx="20", pady="8", font="16", command=click_button)
photo.pack()
#btn.pack()
root.mainloop()
loop()
Появляется ошибка:
C:\Python27\python.exe D:/games/bot-master/t.py
Traceback (most recent call last):
File "D:/games/bot-master/t.py", line 98, in
loop()
File "D:/games/bot-master/t.py", line 87, in loop
photo = PhotoImage(image=img)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 3371, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 3325, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: unknown option "-image"
Process finished with exit code 1
Не понимаю, почему Unknown option, ведь даже в самом файле библиотеки этот момент обрабатывается - открывал, смотрел.
Питон 2.7