鱼C论坛

 找回密码
 立即注册
查看: 1610|回复: 1

[作品展示] 自制简单按键助手

[复制链接]
发表于 2020-9-6 22:49:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
因实验需要延时点击,写了个简单的小助手
  1. from PySide2.QtWidgets import QApplication, QMessageBox, QTableWidget, QFileDialog, QTableWidgetItem, QColorDialog, \
  2.     QProgressBar, QStatusBar
  3. from PySide2.QtUiTools import QUiLoader
  4. from PySide2.QtCore import QFile, QUrl
  5. from PySide2.QtGui import QIcon
  6. from PySide2.QtWebEngineWidgets import QWebEngineView

  7. import pyautogui as pa
  8. import pyperclip as pp
  9. import time
  10. from threading import Thread
  11. import os

  12. class MainWin:
  13.     def __init__(self):
  14.         qfile = QFile('main.ui')
  15.         qfile.open(qfile.ReadOnly)
  16.         qfile.close()

  17.         self.ui = QUiLoader().load(qfile)
  18.         self.ui.setWindowTitle('autodesk')

  19.         for each in pa.KEYBOARD_KEYS:
  20.             if each in ['\t', '\n', '\r']:
  21.                 self.ui.key_cbox.addItem(str(list(each)))
  22.             else:
  23.                 self.ui.key_cbox.addItem(each)

  24.         self.command_list = []
  25.         self.command_content = []
  26.         self.show_list = []
  27.         self.text_expend = ''
  28.         self.command = ['鼠标左键', '鼠标右键', '鼠标左键双击', '按键', '按键按下', '按键松开',
  29.                         '鼠标移动', '文本', '操作间隔时间', '操作移动时间', '鼠标左键拖拽', '鼠标左键拖拽']
  30.         flag = 1
  31.         # 读取保存的组合指令
  32.         if 'command.txt' in os.listdir():
  33.             with open('command.txt', 'r') as f:
  34.                 for eachline in f:
  35.                     if ':' in eachline and eachline[:-1].split(':')[0] in self.command:
  36.                         if not flag:
  37.                             self.command_content.append(self.text_expend[:-1])
  38.                             self.show_list.append('文本:' + self.text_expend[:-1])
  39.                             flag = 1

  40.                         if eachline[:-1].split(':')[0] == '文本':
  41.                             flag = 0
  42.                             self.text_expend = ''
  43.                             self.text_expend += eachline.split(':')[1]
  44.                             self.command_list.append(eachline.split(':')[0])

  45.                         else:
  46.                             self.command_list.append(eachline[:-1].split(':')[0])
  47.                             self.command_content.append(eachline[:-1].split(':')[1])
  48.                             self.show_list.append(eachline[:-1])
  49.                     else:
  50.                         self.text_expend += eachline
  51.                 if not flag:
  52.                     self.command_content.append(self.text_expend[:-1])
  53.                     self.show_list.append('文本:' + self.text_expend[:-1])

  54.             for each in self.show_list:
  55.                 self.ui.command_browser.append(each)  #

  56.         print(self.command_list, self.command_content, self.show_list)

  57.         self.dur = 0.1
  58.         self.interval = 0.1

  59.         self.ui.pos_button.clicked.connect(self.pos_button)
  60.         self.ui.clear_button.clicked.connect(self.clear_button)
  61.         self.ui.click_button.clicked.connect(self.click_button)
  62.         self.ui.drag_button.clicked.connect(self.drag_button)
  63.         self.ui.key_button.clicked.connect(self.key_button)
  64.         self.ui.text_button.clicked.connect(self.text_button)
  65.         self.ui.insert_button.clicked.connect(self.insert_button)
  66.         self.ui.do_button.clicked.connect(self.do_button)
  67.         self.ui.del_button.clicked.connect(self.del_button)
  68.         self.ui.clear_button_1.clicked.connect(self.clear_button_1)

  69.     def pos_button(self):
  70.         time.sleep(3)
  71.         x, y = pa.position()
  72.         s = 'X: ' + str(x).rjust(4) + ', Y: ' + str(y).rjust(4)
  73.         self.ui.pos_browser.append(s)

  74.     def clear_button(self):
  75.         self.ui.pos_browser.clear()

  76.     def click_button(self):
  77.         try:
  78.             delay = float(self.ui.delay_line.text()) if self.ui.delay_line.text() else 0
  79.             mouse = self.ui.mouse_cbox.currentText()
  80.             click_num = int(self.ui.click_num_line.text())
  81.             click_time = float(self.ui.click_time_line.text()) if self.ui.click_time_line.text() else 0
  82.             x, y = self.ui.click_pos_line.text().split()
  83.             dur = float(self.ui.click_duration_line.text()) if self.ui.click_duration_line.text() else 1
  84.             self.ui.label_show.setText('程序进行中,请勿关闭窗口!')
  85.             thread_click = Thread(target=self.thread_click,
  86.                                   args=(int(x), int(y), click_num, click_time, mouse, dur, delay))
  87.             # pa.click(int(x), int(y), int(click_num), float(click_time), button=mouse, duration=int(dur))
  88.             thread_click.start()
  89.         except ValueError:
  90.             QMessageBox.critical(self.ui, '错误', '输入有误,请重新输入!')

  91.     def thread_click(self, x, y, click_num, click_time, mouse, dur, delay):
  92.         time.sleep(delay)
  93.         pa.click(x, y, click_num, click_time, button=mouse, duration=dur)
  94.         self.ui.label_show.setText('')
  95.         # QMessageBox.about(self.ui, '完成', '请进行下一步操作')

  96.     def drag_button(self):
  97.         try:
  98.             delay = float(self.ui.delay_line.text()) if self.ui.delay_line.text() else 0
  99.             mouse = self.ui.mouse_drag_cbox.currentText()
  100.             a, b = self.ui.drag_pos_line.text().split()
  101.             x, y = self.ui.drag_pos_line_1.text().split()
  102.             dur = float(self.ui.drag_duration_line.text()) if self.ui.drag_duration_line.text() else 6
  103.             self.ui.label_show.setText('程序进行中,请勿关闭窗口!')
  104.             thread_drag = Thread(target=self.thread_drag,
  105.                                  args=(int(a), int(b), int(x), int(y), mouse, dur, delay))
  106.             thread_drag.start()
  107.         except ValueError:
  108.             QMessageBox.critical(self.ui, '错误', '输入有误,请重新输入!')

  109.     def thread_drag(self, a, b, x, y, mouse, dur, delay):
  110.         time.sleep(delay)
  111.         pa.moveTo(a, b)
  112.         pa.dragTo(x, y, button=mouse, duration=dur)
  113.         self.ui.label_show.setText('')
  114.         # QMessageBox.about(self.ui, '完成', '请进行下一步操作')

  115.     def key_button(self):
  116.         try:
  117.             delay = float(self.ui.delay_line.text()) if self.ui.delay_line.text() else 0
  118.             x, y = self.ui.key_pos_line.text().split()
  119.             dur = float(self.ui.key_duration_line.text()) if self.ui.key_duration_line.text() else 1
  120.             k = self.ui.key_cbox.currentText()
  121.             choice = self.ui.key_choice_cbox.currentText()
  122.             self.ui.label_show.setText('程序进行中,请勿关闭窗口!')
  123.             thread_key = Thread(target=self.thread_key,
  124.                                 args=(int(x), int(y), dur, delay, k, choice))
  125.             thread_key.start()
  126.         except ValueError:
  127.             QMessageBox.critical(self.ui, '错误', '输入有误,请重新输入!')

  128.     def thread_key(self, x, y, dur, delay, k, choice):
  129.         time.sleep(delay)
  130.         pa.click(x, y, duration=dur)
  131.         if choice == 'press':
  132.             pa.press(k)
  133.         elif choice == 'KeyDown':
  134.             pa.keyDown(k)
  135.         else:
  136.             pa.keyUp(k)
  137.         self.ui.label_show.setText('')
  138.         # QMessageBox.about(self.ui, '完成', '请进行下一步操作')

  139.     def text_button(self):
  140.         try:
  141.             delay = float(self.ui.delay_line.text()) if self.ui.delay_line.text() else 0
  142.             x, y = self.ui.text_pos_line.text().split()
  143.             dur = float(self.ui.text_duration_line.text()) if self.ui.text_duration_line.text() else 1
  144.             content = self.ui.text_text.toPlainText()
  145.             self.ui.label_show.setText('程序进行中,请勿关闭窗口!')
  146.             thread_text = Thread(target=self.thread_text,
  147.                                  args=(int(x), int(y), dur, delay, content))
  148.             thread_text.start()
  149.         except ValueError:
  150.             QMessageBox.critical(self.ui, '错误', '输入有误,请重新输入!')

  151.     def thread_text(self, x, y, dur, delay, content):
  152.         time.sleep(delay)
  153.         pa.click(x, y, duration=dur)
  154.         pp.copy(content)
  155.         pa.hotkey('ctrl', 'v')
  156.         self.ui.label_show.setText('')
  157.         # QMessageBox.about(self.ui, '完成', '请进行下一步操作')

  158.     def insert_button(self):
  159.         try:
  160.             command = self.ui.com_cbox.currentText()
  161.             content = self.ui.com_text.toPlainText()
  162.             self.command_list.append(command)
  163.             if command in ['鼠标左键', '鼠标右键', '鼠标左键双击']:
  164.                 show = command + ':'
  165.                 self.command_content.append(content)
  166.             elif command in ['按键', '按键按下', '按键松开']:
  167.                 show = command + ':' + self.ui.key_cbox.currentText()
  168.                 self.command_content.append(self.ui.key_cbox.currentText())
  169.             elif command in ['鼠标移动', '文本', '操作间隔时间', '操作移动时间', '鼠标左键拖拽', '鼠标左键拖拽']:
  170.                 if command in ['鼠标移动', '鼠标左键拖拽', '鼠标左键拖拽']:
  171.                     int(content.split()[0])
  172.                     int(content.split()[1])
  173.                     if len(content.split()) != 2:
  174.                         raise IndexError
  175.                 elif command in ['操作间隔时间', '操作移动时间']:
  176.                     float(content)
  177.                 show = command + ':' + content
  178.                 self.command_content.append(content)
  179.             self.ui.command_browser.append(show)
  180.             self.show_list.append(show)
  181.             self.ui.com_text.clear()
  182.         except (ValueError, IndexError):
  183.             QMessageBox.critical(self.ui, '错误', '输入有误,请重新输入!')

  184.     def do_button(self):
  185.         try:
  186.             if not self.command_list:
  187.                 raise ValueError
  188.             self.ui.label_show.setText('程序进行中,请勿关闭窗口!')
  189.             thread_do = Thread(target=self.thread_do,
  190.                                args=())
  191.             thread_do.start()
  192.         except ValueError:
  193.             QMessageBox.critical(self.ui, '错误', '请输入指令!')

  194.     def thread_do(self):
  195.         delay = float(self.ui.delay_line.text()) if self.ui.delay_line.text() else 0
  196.         time.sleep(delay)
  197.         for index in range(len(self.command_list)):
  198.             if self.command_list[index] == '鼠标移动':
  199.                 pa.moveTo(int(self.command_content[index].split()[0]), int(self.command_content[index].split()[1]))
  200.             elif self.command_list[index] == '鼠标左键':
  201.                 pa.click()
  202.             elif self.command_list[index] == '鼠标右键':
  203.                 pa.click(button='right')
  204.             elif self.command_list[index] == '鼠标左键双击':
  205.                 pa.doubleClick()
  206.             elif self.command_list[index] == '鼠标左键拖拽':
  207.                 pa.dragTo(int(self.command_content[index].split()[0]), int(self.command_content[index].split()[1]), duration=6)
  208.             elif self.command_list[index] == '鼠标右键拖拽':
  209.                 pa.dragTo(int(self.command_content[index].split()[0]), int(self.command_content[index].split()[1]), button='right', duration=6)
  210.             elif self.command_list[index] == '按键':
  211.                 pa.press(self.command_content[index])
  212.             elif self.command_list[index] == '按键按下':
  213.                 pa.keyDown(self.command_content[index])
  214.             elif self.command_list[index] == '按键松开':
  215.                 pa.keyUp(self.command_content[index])
  216.             elif self.command_list[index] == '文本':
  217.                 pp.copy(self.command_content[index])
  218.                 pa.hotkey('ctrl', 'v')
  219.             elif self.command_list[index] == '操作移动时间':
  220.                 self.dur = int(self.command_content[index])
  221.             elif self.command_list[index] == '操作间隔时间':
  222.                 self.interval = int(self.command_content[index])
  223.             time.sleep(self.interval)
  224.         with open('command.txt', 'w') as f:
  225.             for each in self.show_list:
  226.                 f.write(each + '\n')
  227.         self.ui.label_show.setText('')
  228.         # QMessageBox.about(self.ui, '完成', '请进行下一步操作')

  229.     def del_button(self):
  230.         try:
  231.             self.command_content.pop()
  232.             self.command_list.pop()
  233.             self.show_list.pop()
  234.             self.ui.command_browser.clear()
  235.             for each in self.show_list:
  236.                 self.ui.command_browser.append(each)
  237.         except IndexError:
  238.             pass

  239.     def clear_button_1(self):
  240.         self.command_content.clear()
  241.         self.command_list.clear()
  242.         self.show_list.clear()
  243.         self.ui.command_browser.clear()


  244. app = QApplication([])
  245. app.setWindowIcon(QIcon('ico.png'))
  246. mainwin = MainWin()
  247. mainwin.ui.show()
  248. app.exec_()
复制代码

附件.rar

2.62 KB, 下载次数: 4

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-7 08:54:06 | 显示全部楼层
厉害厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 18:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表