想要实现一个桌面图标移动的python脚本,想利用鼠标模拟来实现,但是不知道桌面上每个图标的坐标以及需要图标所代表的名称(如知道这个图标是微信图标),可以怎么获取呢
获取桌面上每个图标的坐标和名称是一个比较复杂的任务,需要通过一些系统级别的API或者第三方库来实现。
一种可行的方法是通过Python的pyautogui库来获取桌面上的图标坐标和名称。
具体步骤如下:
1.安装pyautogui库,可以使用pip命令进行安装:pip install pyautogui
2.使用pyautogui库中的screenshot()方法获取桌面截图,例如:screenshot = pyautogui.screenshot()
3.使用图像处理库如Pillow或OpenCV来识别图标的位置和名称。这里以Pillow为例,先将截图保存到本地,然后打开并进行图像处理。代码示例:
from PIL import Image
import pytesseract
# 将截图保存到本地
screenshot.save('screenshot.png')
# 打开截图并进行图像处理
img = Image.open('screenshot.png')
img_gray = img.convert('L') # 转换为灰度图像
# 使用pytesseract库识别图像中的文字
result = pytesseract.image_to_string(img_gray, lang='chi_sim')
print(result)
上述代码使用了pytesseract库来识别图像中的文字,需要先安装tesseract OCR引擎,然后使用pytesseract.pytesseract.tesseract_cmd设置tesseract的路径。
根据识别结果和已知的图标进行匹配,得到每个图标的位置和名称。
需要注意的是,不同操作系统和桌面环境的图标布局和名称可能不同,因此需要对不同的系统和桌面环境进行适配。
我本科读机械设计制造及其自动化,暂时没有读研究生的想法,但非全日制的研究生个人蛮感兴趣,现在想找一份数据分析类的岗位,咨询了一些培训机构之后(建议找有保薪协议的,有些机构有就业服务,但也只是提供模拟面试和把你的岗位推过去给合作的企业,企业要不要你,全看他们企业方)。
在2021年12月初开始找工作,5月份开始学,6月份离职后全身心投入到学习培训机构提供的教学内容中,目前认为自己已经把想学习的相关技能都掌握了,想出去工作了,一天两场面试这样进行下来,到了12月中旬,得出的结果是:
转行做技术岗位难度比较大
我转行的跨度非常之大,而且没有相关的工作经验,能去面试已经算看的起我哈哈哈哈哈。别人宁愿要一个科班出身的应届生也不要你这个学习成绩在校内、在自己专业内能收到老师认可和同学赞赏和羡慕的人,隔行如隔山,各位转行也三思而后行。
问题解答:
由于Windows系统中的图标坐标和名称是由桌面壁纸决定的,因此可以通过获取桌面壁纸的位置和尺寸来计算出图标的位置和名称。可以使用PIL库中的ImageGrab模块来获取屏幕截图,从而获得桌面壁纸的图像。具体步骤如下:
1.安装PIL库,可以使用pip install pillow命令来安装。
2.使用ImageGrab模块中的grab()函数获取屏幕截图,得到桌面壁纸的图像。
3.根据桌面壁纸的位置和尺寸计算出每个图标的位置和名称。通常情况下,桌面图标的位置是相对于桌面壁纸左上角的偏移量,因此需要先获取桌面壁纸的位置,然后计算出每个图标的具体位置。
4.使用pyautogui模块来模拟鼠标事件,移动图标。
下面是具体的代码实现:
import os
from PIL import ImageGrab
import pyautogui
# 获取桌面壁纸的位置和尺寸
wallpaper_path = os.path.join(os.getenv('APPDATA'), 'Microsoft', 'Windows', 'Themes', 'TranscodedWallpaper')
wallpaper_image = ImageGrab.grab(bbox=None) # 获取屏幕截图
# 计算图标的位置
icon_size = (64, 64) # 图标的尺寸
x0, y0 = wallpaper_image.size # 桌面壁纸的尺寸
num_cols = int(x0 / icon_size[0])
num_rows = int(y0 / icon_size[1])
for row in range(num_rows):
for col in range(num_cols):
name = f"Icon_{row*num_cols+col}"
x = col * icon_size[0]
y = row * icon_size[1]
icon_bbox = (x, y, x+icon_size[0], y+icon_size[1])
# 移动图标
pyautogui.moveTo(x, y, duration=0.25)
pyautogui.dragTo(x+100, y+100, duration=0.25, button='left')
需要注意的是,由于桌面壁纸的位置和尺寸可能会因不同的操作系统和显示器而有所不同,因此可能需要根据实际情况进行调整。
另外,如果需要获取每个图标的名称,可以使用os模块中的listdir()函数来获取桌面文件夹中的文件列表,并利用字符串匹配来确定每个文件的名称。