PyAutoGui在单击一个特定的点之后,它会单击一个未定义的位置

2024-04-20 03:37:26 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我很抱歉我用词不当。我想这是我能解释的最好的了

所以这里不是解释,而是一个GIF来告诉你我的问题是什么。 注意:我只在项目中间设置了点击

enter image description here

以下是触发点击的代码:

INVEN是一个包含56个单独值的列表。但我编程的方法是,两个值成对出现。意思,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

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


Tags: 项目key代码posshiftcoordsgifupper
1条回答
网友
1楼 · 发布于 2024-04-20 03:37:26

问题是:(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])

虽然我不知道为什么你会想通过相同的输入循环三次。。。你知道吗

相关问题 更多 >