编程新手,stackoverflow 社区的新成员。出于此代码的目的,我一直在阅读此处的主题,有关使用的流程的教程等。
我的项目是关于一个 4 人在线纸牌游戏(tichu),我需要计算实时播放的纸牌(总共 56 张纸牌)。所以我制作了一个显示可用纸牌的窗口(tkinter)。我使用每张卡片的一小部分(12x24 像素)来匹配桌面(玩游戏的地方)。程序扫描屏幕上显示的每张卡片,如果找到,它会替换为 GUI 上较暗的图标。当游戏内显示重置按钮时,GUI 会重置(pyautogui)。这里的问题是扫描和刷新 GUI 真的很慢,并且错过了很多牌(导致下一个玩家移动)。我希望该程序实时多扫描所有 56 张卡的可用性。可能吗?opencv 是解决方案吗?我不知道在我的代码上实现它:/
程序开始运行,等待卡片显示。它只能识别尺寸和分辨率完全相同的卡片。程序在读取“reset.png”图像时停止。
下面是要测试的代码和屏幕截图:
from Tkinter import *
from PIL import Image, ImageTk
import pyautogui
root = Tk()
root.title("Available Cards Playing")
for i in range(4):
for j in range(14):
tableCard = 'c%d%d' % (i, j) # building GUI table
photo = PhotoImage(file='card_table/'+tableCard+'.gif')
l = Label(image=photo)
l.image=photo
l.grid(row=i, column=j, sticky=NSEW)
root.attributes("-topmost", True) # window always on top
root.attributes("-toolwindow", 1) # window no minimize
loop = 0
while loop < 1: # program is running infinitelly till we close the window
resetTable = pyautogui.locateCenterOnScreen('cards/reset.png')
if resetTable is None:
for i in range(4):
for j in range(14):
sCard = 's%d%d' % (i, j) # 56 cards one-by-one are being scanned
checkCard = pyautogui.locateCenterOnScreen('cards/'+sCard+'.png')
if type(checkCard) == tuple: # checking if card was founded, then disable it on GUI
shadow = PhotoImage(file='card_table/dc%d%d.gif' % (i, j))
l = Label(image=shadow)
l.image=shadow
l.grid(row=i, column=j, sticky=NSEW)
root.update()
elif type(resetTable) == tuple: # if reset button is scanned, GUI resets
for i in range(4):
for j in range(14):
#
tableCard = 'c%d%d' % (i, j)
photo = PhotoImage(file='card_table/' + tableCard + '.gif')
l = Label(image=photo)
l.image = photo
l.grid(row=i, column=j, sticky=NSEW)
root.update()
root.mainloop()
这是您可以用来测试功能的 gui 界面
这是项目的临时链接,带有 .py 和所有图像 (173kb) zip,以便您可以尝试其功能
提前谢谢吉奥!