kylin121380 发表于 2020-9-6 22:49:14

自制简单按键助手

因实验需要延时点击,写了个简单的小助手{:10_254:} 。
from PySide2.QtWidgets import QApplication, QMessageBox, QTableWidget, QFileDialog, QTableWidgetItem, QColorDialog, \
    QProgressBar, QStatusBar
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile, QUrl
from PySide2.QtGui import QIcon
from PySide2.QtWebEngineWidgets import QWebEngineView

import pyautogui as pa
import pyperclip as pp
import time
from threading import Thread
import os

class MainWin:
    def __init__(self):
      qfile = QFile('main.ui')
      qfile.open(qfile.ReadOnly)
      qfile.close()

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

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

      self.command_list = []
      self.command_content = []
      self.show_list = []
      self.text_expend = ''
      self.command = ['鼠标左键', '鼠标右键', '鼠标左键双击', '按键', '按键按下', '按键松开',
                        '鼠标移动', '文本', '操作间隔时间', '操作移动时间', '鼠标左键拖拽', '鼠标左键拖拽']
      flag = 1
      # 读取保存的组合指令
      if 'command.txt' in os.listdir():
            with open('command.txt', 'r') as f:
                for eachline in f:
                  if ':' in eachline and eachline[:-1].split(':') in self.command:
                        if not flag:
                            self.command_content.append(self.text_expend[:-1])
                            self.show_list.append('文本:' + self.text_expend[:-1])
                            flag = 1

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

                        else:
                            self.command_list.append(eachline[:-1].split(':'))
                            self.command_content.append(eachline[:-1].split(':'))
                            self.show_list.append(eachline[:-1])
                  else:
                        self.text_expend += eachline
                if not flag:
                  self.command_content.append(self.text_expend[:-1])
                  self.show_list.append('文本:' + self.text_expend[:-1])

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

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

      self.dur = 0.1
      self.interval = 0.1

      self.ui.pos_button.clicked.connect(self.pos_button)
      self.ui.clear_button.clicked.connect(self.clear_button)
      self.ui.click_button.clicked.connect(self.click_button)
      self.ui.drag_button.clicked.connect(self.drag_button)
      self.ui.key_button.clicked.connect(self.key_button)
      self.ui.text_button.clicked.connect(self.text_button)
      self.ui.insert_button.clicked.connect(self.insert_button)
      self.ui.do_button.clicked.connect(self.do_button)
      self.ui.del_button.clicked.connect(self.del_button)
      self.ui.clear_button_1.clicked.connect(self.clear_button_1)

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

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

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

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

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

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

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

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

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

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

    def insert_button(self):
      try:
            command = self.ui.com_cbox.currentText()
            content = self.ui.com_text.toPlainText()
            self.command_list.append(command)
            if command in ['鼠标左键', '鼠标右键', '鼠标左键双击']:
                show = command + ':'
                self.command_content.append(content)
            elif command in ['按键', '按键按下', '按键松开']:
                show = command + ':' + self.ui.key_cbox.currentText()
                self.command_content.append(self.ui.key_cbox.currentText())
            elif command in ['鼠标移动', '文本', '操作间隔时间', '操作移动时间', '鼠标左键拖拽', '鼠标左键拖拽']:
                if command in ['鼠标移动', '鼠标左键拖拽', '鼠标左键拖拽']:
                  int(content.split())
                  int(content.split())
                  if len(content.split()) != 2:
                        raise IndexError
                elif command in ['操作间隔时间', '操作移动时间']:
                  float(content)
                show = command + ':' + content
                self.command_content.append(content)
            self.ui.command_browser.append(show)
            self.show_list.append(show)
            self.ui.com_text.clear()
      except (ValueError, IndexError):
            QMessageBox.critical(self.ui, '错误', '输入有误,请重新输入!')

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

    def thread_do(self):
      delay = float(self.ui.delay_line.text()) if self.ui.delay_line.text() else 0
      time.sleep(delay)
      for index in range(len(self.command_list)):
            if self.command_list == '鼠标移动':
                pa.moveTo(int(self.command_content.split()), int(self.command_content.split()))
            elif self.command_list == '鼠标左键':
                pa.click()
            elif self.command_list == '鼠标右键':
                pa.click(button='right')
            elif self.command_list == '鼠标左键双击':
                pa.doubleClick()
            elif self.command_list == '鼠标左键拖拽':
                pa.dragTo(int(self.command_content.split()), int(self.command_content.split()), duration=6)
            elif self.command_list == '鼠标右键拖拽':
                pa.dragTo(int(self.command_content.split()), int(self.command_content.split()), button='right', duration=6)
            elif self.command_list == '按键':
                pa.press(self.command_content)
            elif self.command_list == '按键按下':
                pa.keyDown(self.command_content)
            elif self.command_list == '按键松开':
                pa.keyUp(self.command_content)
            elif self.command_list == '文本':
                pp.copy(self.command_content)
                pa.hotkey('ctrl', 'v')
            elif self.command_list == '操作移动时间':
                self.dur = int(self.command_content)
            elif self.command_list == '操作间隔时间':
                self.interval = int(self.command_content)
            time.sleep(self.interval)
      with open('command.txt', 'w') as f:
            for each in self.show_list:
                f.write(each + '\n')
      self.ui.label_show.setText('')
      # QMessageBox.about(self.ui, '完成', '请进行下一步操作')

    def del_button(self):
      try:
            self.command_content.pop()
            self.command_list.pop()
            self.show_list.pop()
            self.ui.command_browser.clear()
            for each in self.show_list:
                self.ui.command_browser.append(each)
      except IndexError:
            pass

    def clear_button_1(self):
      self.command_content.clear()
      self.command_list.clear()
      self.show_list.clear()
      self.ui.command_browser.clear()


app = QApplication([])
app.setWindowIcon(QIcon('ico.png'))
mainwin = MainWin()
mainwin.ui.show()
app.exec_()

coolliqing 发表于 2020-9-7 08:54:06

厉害厉害{:10_254:}
页: [1]
查看完整版本: 自制简单按键助手