LY霖 2023-06-16 23:03 采纳率: 28.6%
浏览 10

python获取桌面图标坐标和名称

要实现桌面图标的移动,我的想法是用python模拟鼠标点击来移动,可是怎么获得桌面各个图标的坐标,以及他们所代表的实际意义呢(比如知道某个图标是微信图标),因为之后需要根据它的不同名称来移动到不同的位置。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-18 02:30
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7729897
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:python 熔断器,限流器,实现服务的熔断和限流,也可以应用与其他场景的函数超时处理和异常错误处理。
    • 同时,你还可以查看手册:python- 旧式字符串格式化方法 中的内容
    • 除此之外, 这篇博客: 用Python写一个中英动态翻译软件中的 无聊的时候刷抖音发现了一个好玩的,论文文献翻译器,可以实时的翻译内容,具体是这么个功能,看着还不错。用python来实现一下类似功能。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      软件实现:
      软件通过实时检测剪切板的内容来实现实时翻译
      用的是百度基础翻译api,当然可以注册有道云的翻译api(翻译效果不错),不过只提供50块钱的翻译量(也不少。。。),我们加上tk可视化库来完成软件的大体功能。

      1. 注册百度账号
      2. 注册为百度翻译者个人用户
      3. 下载Python-demo
      4. 导入个人密钥
      5. 动态获取剪切板内容
      6. 实现翻译功能

      百度api注册网址:http://fanyi-api.baidu.com/api/trans/product/prodinfo
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      点击总览 下方有申请信息 里面有app id 和密钥
      然后上代码:

      import http.client
      import hashlib
      import urllib
      import random
      import json
      from tkinter import *
      import win32clipboard,time
      import threading
      #百度翻译api
      def translate(fromLang,toLang,q):
          appid = '**********'  # 填写你的appid
          secretKey = '**********'  # 填写你的密钥
          httpClient = None
          myurl = '/api/trans/vip/translate'
          fromLang = fromLang   #原文语种
          toLang = toLang   #译文语种
          salt = random.randint(32768, 65536)
          q= q
          sign = appid + q + str(salt) + secretKey
          sign = hashlib.md5(sign.encode()).hexdigest()
          myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(
          salt) + '&sign=' + sign
          try:
              httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
              httpClient.request('GET', myurl)
              # response是HTTPResponse对象
              response = httpClient.getresponse()
              result_all = response.read().decode("utf-8")
              result = json.loads(result_all)
              return result['trans_result'][0]['dst']
          except Exception as e:
              print (e)
          finally:
              if httpClient:
                  httpClient.close()
      

      获取和设置剪切板内容:

      #获取剪切板输入
      def clipboard_get():
          win32clipboard.OpenClipboard()
          data = win32clipboard.GetClipboardData()
          win32clipboard.CloseClipboard()
          return data
      #设置剪切板输入
      def clipboard_set(data):
          win32clipboard.OpenClipboard()
          win32clipboard.EmptyClipboard()
          win32clipboard.SetClipboardData(win32clipboard.CF_UNICODETEXT, data)
          win32clipboard.CloseClipboard()
      

      主程序:

      #主函数
      def newmain(fromlang,to):
          '''
          fromlang:翻译源
          to:翻译目标
          '''
          while 1:
              data=clipboard_get()
              if flag !='out':
                  if data !='404':
                      if data !='':
                          target=translate(fromlang,to,data)
                          fromres.set(data)
                          result.set(target)
                          clipboard_set('404')
                      else:
                          #print('不可为空')
                          pass
                  else:
                      #print('暂无数据')
                      time.sleep(2)
              else:
                  print('退出')
                  break
      

      全部代码:

      #百度通用翻译API,不包含词典、tts语音合成等资源,如有相关需求请联系translate_api@baidu.com
      # coding=utf-8
      
      import http.client
      import hashlib
      import urllib
      import random
      import json
      from tkinter import *
      import win32clipboard,time
      import threading
      #百度翻译api
      def translate(fromLang,toLang,q):
          appid = '******'  # 填写你的appid
          secretKey = '*****'  # 填写你的密钥
          httpClient = None
          myurl = '/api/trans/vip/translate'
          fromLang = fromLang   #原文语种
          toLang = toLang   #译文语种
          salt = random.randint(32768, 65536)
          q= q
          sign = appid + q + str(salt) + secretKey
          sign = hashlib.md5(sign.encode()).hexdigest()
          myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(
          salt) + '&sign=' + sign
          try:
              httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
              httpClient.request('GET', myurl)
              # response是HTTPResponse对象
              response = httpClient.getresponse()
              result_all = response.read().decode("utf-8")
              result = json.loads(result_all)
              return result['trans_result'][0]['dst']
          except Exception as e:
              print (e)
          finally:
              if httpClient:
                  httpClient.close()
      #获取剪切板输入
      def clipboard_get():
          win32clipboard.OpenClipboard()
          data = win32clipboard.GetClipboardData()
          win32clipboard.CloseClipboard()
          return data
      #设置剪切板输入
      def clipboard_set(data):
          """设置剪贴板数据"""
          win32clipboard.OpenClipboard()
          win32clipboard.EmptyClipboard()
          win32clipboard.SetClipboardData(win32clipboard.CF_UNICODETEXT, data)
          win32clipboard.CloseClipboard()
      #主函数
      def newmain(fromlang,to):
          '''
          fromlang:翻译源
          to:翻译目标
          '''
          while 1:
          
              data=clipboard_get()
              if flag !='out':
                  if data !='404':
                      if data !='':
                          target=translate(fromlang,to,data)
                          fromres.set(data)
                          result.set(target)
                          clipboard_set('404')
                      else:
                          #print('不可为空')
                          pass
                  else:
                      #print('暂无数据')
                      time.sleep(2)
              else:
                  print('退出')
                  break
      #汉译英 可调整翻译语言 参见百度api文档
      def thread_zhToEn():
          t1=threading.Thread(target=newmain,args=('zh','en'))
          t1.start()
      #英翻汉
      def thread_EhToZn():
          t2=threading.Thread(target=newmain,args=('en','zh'))
          t2.start()
      if __name__ == '__main__':
      '''
      flag:由于threading没有提供杀死线程,所以设置一个标识来结束函数
      为防止tk卡死需要引入线程来完成翻译功能
      '''
          flag='1'
          app=Tk()
          app.title('翻译程序 author:liubingzhe')
          app.geometry('800x600')
          fromres=StringVar()
          result=StringVar()
          button_run=Button(app,text='汉译英',command=thread_zhToEn,width=800).pack()
          button_run=Button(app,text='英译汉',command=thread_EhToZn,width=800).pack()
          Label=Label(app,text='请退出后切换翻译模式').pack()
          w = Message(app,textvariable=fromres,aspect=200,font=('微软雅黑','11')).pack()
          w1 = Message(app,textvariable=result,aspect=200,font=('微软雅黑','11')).pack()
          app.mainloop()
          flag='out'
      
      

      通过Ctrl-C复制内容,软件每隔两秒获取一次剪切板内容,通过调用百度翻译api来实现动态翻译,点击上方汉译英或英译汉来开启功能。
      每隔两秒是为了防止剪切板接口由于频繁读取报错,不会影响软件体验。
      在这里插入图片描述
      可以调整message的aspect参数来调整显示的样式
      当然也可以设定为固定值width来更好的优化显示效果
      没有怎么优化,基本就是这个样子了

       w = Message(app,textvariable=fromres,width=700,font=('微软雅黑','11')).pack()
       w1 = Message(app,textvariable=result,width=700,font=('微软雅黑','11')).pack()
      

      在这里插入图片描述
      将其用pyinstaller打包做成桌面软件就可以啦.

    • 您还可以看一下 CSDN就业班老师的Python爬虫技术和浏览器模拟,验证码识别视频教程课程中的 验证码信息识别小节, 巩固相关知识点

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 6月16日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀