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

时间:2019-01-08 16:27:44

标签: python pyautogui

嗨,我很抱歉我标题的表达方式。我认为这是我能解释的最好的方法。

因此,这里无需解释,而是一个GIF向您展示我的问题。 注意:我只在项目中间设置了点击次数

enter image description here

以下是触发点击的代码:

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

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

1 个答案:

答案 0 :(得分: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)

作为旁注,您可能还想在for函数中使用while循环而不是Click()

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])

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