首页 > 解决方案 > TypeError: 'tuple' object is not callable 解决方案 - pyautogui

问题描述

我看不出是代码中的问题。

问题:

尝试运行 python 程序并收到错误消息:
TypeError: 'tuple' object is not callable Solution

尝试修复错误

粘贴箱链接

代码

import pyautogui
import keyboard
import time
import random
import win32.lib.win32con as win32con

#Tile 1 position: X= 1018 Y= 159 RGB:(194, 78, 147)
#Tile 2 position: X= 1113 Y= 159 RGB:(3, 255, 255)
#Tile 3 position: X= 1196 Y= 159 RGB:(2, 247, 68)
#Tile 4 position: X= 1289 Y= 159 RGB:(247, 59, 59)

def KEYRIGHT(x,y):
  pyautogui.RIGHT
  time.sleep(0.01) 

def KEYLEFT(x,y):
  pyautogui.LEFT
  time.sleep(0.01) 
 

def KEYUP(x,y):
     pyautogui.keyUp
     time.sleep(0.01) 
def KEYDOWN(x,y):
  pyautogui.keyDown
  time.sleep(0.01)

while keyboard.is_pressed('q') == False:

    if pyautogui.pixel(1018, 159)(194, 78, 147):
     KEYRIGHT(1018, 159)

    if pyautogui.pixel(1113, 159)(3, 255, 255):
     KEYDOWN(1113, 159)

    if pyautogui.pixel(1196, 159)(2, 247, 68):
     KEYUP(1196, 159)

    if pyautogui.pixel(1289, 159)(247, 59, 59):
     KEYRIGHT(1289, 159)
       

标签: pythonpyautogui

解决方案


pixel函数显然返回一个元组。元组和函数调用的参数都使用括号。因此 Python 认为您正在尝试使用 args 调用函数:(194, 78, 147)显然是红色、绿色和蓝色。但是您似乎想要做的是检查像素返回的值是否等于元组(194, 78, 147)

有些对象是可调用的。例如,您可以创建一个实现的类,def __call__(self, r, g, b)然后创建一个调用的函数,该函数pixel返回该实现的对象,__call__您的代码将在没有语法错误的情况下运行。

但是内置的元组类型没有实现__call__,所以“'tuple'对象不可调用”

我想这就是你想要的:

if pyautogui.pixel(1018, 159) == (194, 78, 147):
 KEYRIGHT(1018, 159)

if pyautogui.pixel(1113, 159) == (3, 255, 255):
 KEYDOWN(1113, 159)

if pyautogui.pixel(1196, 159) == (2, 247, 68):
 KEYUP(1196, 159)

if pyautogui.pixel(1289, 159) == (247, 59, 59):
 KEYRIGHT(1289, 159)

推荐阅读