yidaiyeer757 发表于 2022-3-24 09:59

OA公文处理系统粘贴板







功能比较简单,就是粘贴后自动复制下一条数据到粘贴板,然后手动粘贴后又自动复制下一条数据到粘贴板

from PyQt5.Qt import QWidget,QLabel,QPushButton,QTextEdit,QFont,QLineEdit,QApplication,Qt
import sys
import threading
import keyboard
import win32clipboard as wc
import win32con
import openpyxl
import inspect
import ctypes
import time




按钮kg=0
粘贴kg=0
jc=0
kg=0
单位 = ''
标题 = ''
文号 = ''
mythread=''
mysleep=''
'''=====线程函数1======'''
def _async_raise(tid, exctype):
    """raises the exception, performs cleanup if needed"""
    tid = ctypes.c_long(tid)
    if not inspect.isclass(exctype):
      exctype = type(exctype)
    res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
    if res == 0:
      raise ValueError("invalid thread id")
    elif res != 1:
      # """if it returns a number greater than one, you're in trouble,
      # and you should call it again with exc=NULL to revert the effect"""
      ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
      raise SystemError("PyThreadState_SetAsyncExc failed")
'''=====线程函数2======'''
def stop_thread(thread):
    _async_raise(thread.ident, SystemExit)
def 文本_取出中间文本(原文本, 前面的文本, 后面的文本, 开始的位置=0):
    位置_前 = 原文本.find(前面的文本, 开始的位置)
    位置_后 = 原文本.find(后面的文本, 位置_前 + len(前面的文本))
    if 位置_前 != -1 and 位置_后 != -1:
      return 原文本[位置_前 + len(前面的文本):位置_后]
    else:
      return ''
#创建一个应用程序对象
class mywindow(QWidget):
    '''======时间周期事件,30秒后停止====='''
    def timerEvent(self,evt):
      self.bt.setText(str(int(self.bt.text()) - 1))
      if self.bt.text()=="0":
            self.killTimer(self.wdid)
            self.bt.setText("读取")
            self.bt.setEnabled(True)
    '''======启动====='''
    def __init__(self):
      '''=========窗口代码开始=========='''
      super().__init__()
      global 单位
      global 标题
      global 文号
      self.window=QWidget()
      self.window.setWindowTitle("公文OA简单互通")            #窗口名字
      self.window.resize(200,380)                           #改变窗口大小
      self.window.move(400,200)                           #移送窗口位置
      self.window.setWindowFlags(Qt.WindowStaysOnTopHint)   # 置顶
      self.window.setMaximumSize(200,380)                   # 设置窗口最大尺寸
      self.window.setMinimumSize(200,380)
      #self.window.setWindowFlags(Qt.Widget)                #取消定置
      '''=========窗口代码结束=========='''

      '''=========创建组件函数=========='''
      self.labe()
      self.button()
      self.TextEdit()
      '''=========创建组件函数结束=========='''
      '''读取文件'''
      a=open('../配置.txt', 'w+', encoding='utf-8')
      单位=文本_取出中间文本(str(a.read()),'单位:','。')
      标题=文本_取出中间文本(str(a.read()),'标题:','。')
      文号=文本_取出中间文本(str(a.read()),'文号:','。')
      print(单位)
      a.write('路径%s' % self.ted.toPlainText() + '路径结束单位%s'% self.ted2.text() + '单位结束标题%s' % self.ted3.text() +'标题结束文号%s' % self.ted4.text() + '文号结束')
      a.close()
      self.window.show()
    '''=====标签====='''
    def labe(self):
      '''标签1'''
      self.lb=QLabel(self.window)
      self.lb.resize(190,20)
      self.lb.setText("请拖拽收文簿到蓝色编辑框:")
      self.lb.move(5,5)

      '''标签2'''
      self.lb2 = QLabel(self.window)
      self.lb2.resize(77, 20)
      self.lb2.setText("配置来文单位:")
      self.lb2.move(5,75)

      '''标签3'''
      self.lb3 = QLabel(self.window)
      self.lb3.resize(77, 20)
      self.lb3.setText("配置来文标题:")
      self.lb3.move(5, 105)

      '''标签4'''
      self.lb4 = QLabel(self.window)
      self.lb4.resize(77, 20)
      self.lb4.setText("配置来文文号:")
      self.lb4.move(5,135)

      '''标签5'''
      self.lb5 = QLabel(self.window)
      self.lb5.resize(30, 20)
      self.lb5.setText("单位:")
      self.lb5.move(0, 185)

      '''标签6'''
      self.lb6 = QLabel(self.window)
      self.lb6.resize(30, 20)
      self.lb6.setText("标题:")
      self.lb6.move(0, 225)

      '''标签7'''
      self.lb7 = QLabel(self.window)
      self.lb7.resize(30, 20)
      self.lb7.setText("文号:")
      self.lb7.move(0, 265)

      '''标签8'''
      self.lb8 = QLabel(self.window)
      self.lb8.resize(100, 20)
      self.lb8.setText("当前粘贴板内容:")
      self.lb8.move(0, 295)

      '''标签9'''
      self.lb9 = QLabel(self.window)
      self.lb9.resize(200, 20)
      self.lb9.setText("")
      self.lb9.move(0, 315)

      '''标签10'''
      self.lb10 = QLabel(self.window)
      self.lb10.resize(40, 20)
      self.lb10.setText("编号:")
      self.lb10.move(0, 355)
    '''===按钮====='''
    def button(self):

      self.bt = QPushButton(self.window)
      self.bt.setText("读取")
      self.bt.resize(80, 30)
      self.bt.move(120, 350)
      self.bt.clicked.connect(self.btevt)
      self.bt2 = QPushButton(self.window)
      self.bt2.setText("结束监听")
      self.bt2.resize(55, 30)
      self.bt2.move(142, 124)
      self.bt2.clicked.connect(self.btevt2)

      '''==分割按钮=='''
      self.btfg=QPushButton(self.window)
      self.btfg.setText("")
      self.btfg.resize(250, 3)
      self.btfg.move(-10,160)
      self.btfg.setStyleSheet('background-color:green')

      self.btfg1 = QPushButton(self.window)
      self.btfg1.setText("")
      self.btfg1.resize(250, 3)
      self.btfg1.move(-10, 0)
      self.btfg1.setStyleSheet('background-color:green')

      self.btfg2 = QPushButton(self.window)
      self.btfg2.setText("")
      self.btfg2.resize(3, 170)
      self.btfg2.move(0, -10)
      self.btfg2.setStyleSheet('background-color:green')

      self.btfg3 = QPushButton(self.window)
      self.btfg3.setText("")
      self.btfg3.resize(3, 170)
      self.btfg3.move(197, -10)
      self.btfg3.setStyleSheet('background-color:green')
    '''=====编辑框====='''
    def TextEdit(self):
      a=open(r'../配置.txt', encoding='utf-8')
      strr=str(a.read())
      路径=文本_取出中间文本(strr,'路径','路径结束')
      单位=文本_取出中间文本(strr,'单位','单位结束')
      标题=文本_取出中间文本(strr,'标题','标题结束')
      文号=文本_取出中间文本(strr,'文号','文号结束')
      a.close()
      self.ted=QTextEdit(self.window)
      self.ted.setText(路径)
      self.ted.resize(190,35)
      self.ted.move(5, 25)
      self.ted.setStyleSheet('background-color:cyan')   #改变背景
      self.ted.textChanged.connect(self.editchange)   #文本改变事件

      #字体
      zt = QFont("楷体", 13)
      '''==单位编辑框=='''
      self.ted2=QLineEdit(self.window)
      self.ted2.setText(单位)
      self.ted2.resize(35,28)
      self.ted2.move(105,65)
      self.ted2.setFont(zt)#传递字体参数
      '''==标题编辑框=='''
      self.ted3 = QLineEdit(self.window)
      self.ted3.setText(标题)
      self.ted3.resize(35,28)
      self.ted3.move(105, 95)
      self.ted3.setFont(zt)# 传递字体参数
      '''==文号编辑框=='''
      self.ted4 = QLineEdit(self.window)
      self.ted4.setText(文号)
      self.ted4.resize(35, 28)
      self.ted4.move(105,125)
      self.ted4.setFont(zt)# 传递字体参数

      self.ted5=QTextEdit(self.window)

      self.ted5.resize(160,35)
      self.ted5.move(35, 175)
      self.ted5.setStyleSheet('background-color:cyan')   #改变背景

      self.ted6=QTextEdit(self.window)

      self.ted6.resize(160,35)
      self.ted6.move(35, 215)
      self.ted6.setStyleSheet('background-color:cyan')   #改变背景

      self.ted7=QTextEdit(self.window)

      self.ted7.resize(160,35)
      self.ted7.move(35, 255)
      self.ted7.setStyleSheet('background-color:cyan')   #改变背景


      self.ted8 = QLineEdit(self.window)
      self.ted8.resize(80, 30)
      self.ted8.move(40,350)
      self.ted8.setFont(zt)# 传递字体参数
    '''======文件路径编辑框事件======='''
    def editchange(self):
      if 0 == self.ted.toPlainText().find('file:///'):# 查找是否存在'file:///'
            self.ted.setText(self.ted.toPlainText().replace('file:///', ''))# replace(被替换,用作替换文本)
    '''======按钮事件======='''
    def btevt(self):
      self.bt.setText("5")
      self.bt.setEnabled(False)
      '''======写粘贴板======='''
      def setCopyTxet(strs):    # 设置写入粘贴板函数
            wc.OpenClipboard()    # 打开粘贴板
            wc.EmptyClipboard()   # 清空粘贴板
            wc.SetClipboardData(win32con.CF_UNICODETEXT, strs)# 写入粘贴板
            wc.CloseClipboard()   # 关闭粘贴板
      '''==多线程调用键盘监听=='''
      global 按钮kg
      global a
      global 粘贴kg
      global jc
      self.wdid=window.startTimer(1000)
      if 按钮kg==0:
            '''==保存配置=='''
            a = open('../配置.txt', 'w+', encoding='utf-8')
            a.write('路径%s' % self.ted.toPlainText() + '路径结束单位%s' % self.ted2.text() + '单位结束标题%s' % self.ted3.text() + '标题结束文号%s' % self.ted4.text() + '文号结束')
            a.close()

            '''==启用多线程=='''
            mythread=threading.Thread(target=self.键盘监听,)
            mythread.start()
            mysleep = threading.Thread(target=self.多线程延迟, )
            mysleep.start()
            '''==读取数据=='''
            path = self.ted.toPlainText() # 地址
            workbook = openpyxl.load_workbook(path)# 打开表格
            shenames = workbook.get_sheet_names()# 获取表格所有子表名
            worksheet = workbook.get_sheet_by_name(shenames)# 读取子表
            djh=self.ted8.text()
            if djh=='':
                单位1=worksheet.value
                标题1 = worksheet.value
                文号1 = worksheet.value
            else:
                单位1 = worksheet.value
                标题1 = worksheet.value
                文号1 = worksheet.value
            print(单位1,标题1,文号1)

            self.ted5.setText(单位1)
            self.ted6.setText(标题1)
            self.ted7.setText(文号1)
            setCopyTxet(self.ted5.toPlainText())

            jc=0
            粘贴kg=0
            按钮kg = 1
      else:
            '''==保存配置=='''
            a = open('../配置.txt', 'w+', encoding='utf-8')
            a.write('路径%s'%self.ted.toPlainText()+'路径结束单位%s'% self.ted2.text()+'单位结束标题%s'% self.ted3.text()+'标题结束文号%s'% self.ted4.text()+'文号结束')
            a.close()
            '''==读取数据=='''
            path = self.ted.toPlainText()# 地址
            workbook = openpyxl.load_workbook(path)# 打开表格
            shenames = workbook.get_sheet_names()# 获取表格所有子表名
            worksheet = workbook.get_sheet_by_name(shenames)# 读取子表
            单位1 = worksheet.value
            标题1 = worksheet.value
            文号1 = worksheet.value
            print(单位1, 标题1, 文号1)

            self.ted5.setText(单位1)
            self.ted6.setText(标题1)
            self.ted7.setText(文号1)
            setCopyTxet(self.ted5.toPlainText())
            jc=0
            粘贴kg = 0
            按钮kg = 1
    def btevt2(self):
      keyboard.unhook_all()
    '''======按钮事件内多线程======='''
    def 多线程延迟(self):
      global 粘贴kg
      print(粘贴kg)
      time.sleep(30)
      stop_thread(mythread)
      粘贴kg = 4
      print(粘贴kg)
    def 键盘监听(self):
      global 粘贴kg
      '''======取粘贴板======='''
      def getCopyTxet():# 设置取粘贴板函数
            wc.OpenClipboard()# 打开粘贴板
            copytxet = wc.GetClipboardData()# 取粘贴板内容
            wc.CloseClipboard()# 关闭粘贴板
            return str(copytxet)# 返回粘贴板内容
      '''======写粘贴板======='''
      def setCopyTxet(strs):   # 设置写入粘贴板函数
            wc.OpenClipboard()   # 打开粘贴板
            wc.EmptyClipboard()# 清空粘贴板
            wc.SetClipboardData(win32con.CF_UNICODETEXT, strs)# 写入粘贴板
            wc.CloseClipboard()# 关闭粘贴板
      def 键盘(i):
            global 粘贴kg
            global jc
            self.lb9.setText(getCopyTxet())
            print(i)
            if str(i) == 'KeyboardEvent(ctrl down)':# ctrl按下
                global kg
                kg = 1

            elif str(i) == 'KeyboardEvent(v down)' and kg == 1:# ctrl按下且V也按下

                jc+=1
                if jc>8:
                  粘贴kg = 4
                  jc=0
                if 粘贴kg==1:
                  setCopyTxet(self.ted6.toPlainText())
                  粘贴kg=2
                elif 粘贴kg==2:
                  setCopyTxet(self.ted7.toPlainText())
                  粘贴kg=3
                elif 粘贴kg == 3:
                  setCopyTxet(self.ted8.text())
                  粘贴kg =0
                elif 粘贴kg==0:
                  setCopyTxet(self.ted5.toPlainText())
                  粘贴kg = 1
                elif 粘贴kg == 4:
                  stop_thread(mythread)
                  keyboard.unhook_all()
                print("ctrl+v被按下")

            else:
                kg = 0
                #keyboard.unhook_all()# 关闭键盘监听

      keyboard.hook(键盘)
      keyboard.wait()

if __name__ == '__main__':
    app=QApplication(sys.argv)
    window=mywindow()
    #window.show()
    sys.exit(app.exec())

Hmily 发表于 2022-3-24 11:03

这是从哪复制过来的,编码最好用编码框处理一下。

yidaiyeer757 发表于 2022-3-24 11:10

Hmily 发表于 2022-3-24 11:03
这是从哪复制过来的,编码最好用编码框处理一下。

就是为了写这个,才开始学PY,这是写的第一个工具,代码有点混乱

Hmily 发表于 2022-3-24 11:12

yidaiyeer757 发表于 2022-3-24 11:10
就是为了写这个,才开始学PY,这是写的第一个工具,代码有点混乱

我说的是代码颜色之类的,你试试用论坛的代码框处理一下,重新编辑。

yidaiyeer757 发表于 2022-3-24 11:16

Hmily 发表于 2022-3-24 11:12
我说的是代码颜色之类的,你试试用论坛的代码框处理一下,重新编辑。

改了,谢谢指点:lol

Hmily 发表于 2022-3-24 11:23

yidaiyeer757 发表于 2022-3-24 11:16
改了,谢谢指点

你咋用的code,咋不用系统界面上的了,我给你改了下。

sjklmzc 发表于 2022-3-24 12:07

这个可以有,用的肯定不在少数!

yidaiyeer757 发表于 2022-3-24 12:26

sjklmzc 发表于 2022-3-24 12:07
这个可以有,用的肯定不在少数!

是的,不用切换界面,也不用手动去复制,。然后我又做了一个自动填进相应位置,粘贴都省了{:1_927:}
页: [1]
查看完整版本: OA公文处理系统粘贴板