PyAutoGui - 单击特定位置后,它单击未定义的位置

PyAutoGui - After clicking on a specific spot, it clicks on an undefined location

您好,我对标题的措辞方式深表歉意。我认为这是我能解释的最好的 e_e.

所以这里没有解释,而是向您展示了我的问题所在的 GIF。 注意:我只在项目中间设置了点击次数

这是触发点击的代码:

INVEN 是一个包含 56 个单独值的列表。但是我编程的方式是让值成对出现 2。意思是,INVEN[0] = X CoordsINVEN[1] = Y Coords

for i in range(len(INVEN) - 1):
   keyboard.press(Key.shift)
   Click("clear_inven", (INVEN[i], INVEN[i + 1]))
   keyboard.release(Key.shift)

这是 Click 代码:

def Click(pos, xy):
   i = 0
   while i <= 3:
       if pos.upper() == "CUT_TREE":
           pyautogui.click(xy[0], xy[1])
       elif pos.upper() == "COMPASS":
           pyautogui.click(xy[0], xy[1])
       elif pos.upper() == "CLEAR_INVEN":
           pyautogui.click(xy[0], xy[1])
       i += 1

非常感谢您的阅读!我非常感谢任何帮助:)

问题在这里:(INVEN[i], INVEN[i + 1]),你的INVEN没有正确递增:

INVEN = [674, 362, 716, 362, 758, 362, ...]

# iteration i = 0
INVEN[0] = 674 # x coord
INVEN[1] = 362 # y coord

# iteration i = 1
INVEN[1] = 362 # y coord
INVEN[2] = 716 # x coord

你可以看到这很快就会失控。

相反,您想这样做:

for i in range(0, len(INVEN), 2):
   keyboard.press(Key.shift)
   Click("clear_inven", (INVEN[i], INVEN[i + 1]))
   keyboard.release(Key.shift)

这样i每次(step=2)加2。

但是 很少建议这样做 range(len(INVEN)) 因为您可以很容易地循环遍历没有范围的对象:

for pair in zip(INVEN[::2], INVEN[1::2]):
    Click('something', pair) 

此外,如果您在元组中设置 x, y 可能会更好:

[(674, 362), (716, 362), (758, 362), ...]

这样更容易成对回忆它们:

for pair in INVEN:
    Click('something', pair)

附带说明一下,您可能还想在 Click() 函数中使用 for 循环而不是 while

def Click(pos, xy):
   for i in range(3):
       if pos.upper() == "CUT_TREE":
           pyautogui.click(xy[0], xy[1])
       elif pos.upper() == "COMPASS":
           pyautogui.click(xy[0], xy[1])
       elif pos.upper() == "CLEAR_INVEN":
           pyautogui.click(xy[0], xy[1])

尽管我不确定您为什么要循环遍历相同的输入三次...