【发布时间】:2021-01-02 19:52:36
【问题描述】:
在 Automate the Boring Things 的第 20 章中,有一个使用 pyautogui 绘制螺旋的示例。代码使用.drag() 绘制每个段,但在每个角上,鼠标释放光标并开始新行。无论您使用哪种刷子类型,这都会在每个角落创建一个中断。
为了解决这个美学问题,我尝试修改代码以改用.mouseDown() 和.move()。然而,这最终只绘制了一条从左上角到左下角的线,就好像 while 循环的每次迭代都在重复单击一样。
通过测试:
while True:
pyautogui.mouseDown()
在 mspaint 中,当我自己移动鼠标时,.mousedown() 函数确实可以正常执行。
尝试:
while True:
pyautogui.mouseDown()
pyautogui.move(300, 0, duration=0.5)
也正确地绘制了一条线,但在 300 像素块中这样做。 IE。每次循环迭代时,线段都会在 mspaint 上加载。
在正方形中重复这个实验:
while True:
pyautogui.mouseDown()
pyautogui.move(300, 0, duration=0.5)
pyautogui.move(0, 300, duration=0.5)
pyautogui.move(-300, 0, duration=0.5)
pyautogui.move(0, -300, duration=0.5)
最终什么都没画。
这里发生了什么?为什么.mouseDown() 的行为如此不一致?如何让我的代码绘制出漂亮的完整螺旋?
完整的原始代码供参考:
#! python3
# spiralDraw.py - draws a spiral in mspaint
import pyautogui
import time
time.sleep(5) # give time to go to paint app
distance = 300
change = 20
pyautogui.mouseDown()
while distance > 0:
pyautogui.move(distance, 0, duration=0.5)
distance = distance - change
pyautogui.move(0, distance, duration=0.5)
pyautogui.move(-distance, 0, duration=0.5)
distance = distance - change
pyautogui.move(0, -distance, duration=0.5)
if distance == 0:
pyautogui.mouseUp()
【问题讨论】:
标签: python python-3.x pyautogui