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
这是从哪复制过来的,编码最好用编码框处理一下。
就是为了写这个,才开始学PY,这是写的第一个工具,代码有点混乱 yidaiyeer757 发表于 2022-3-24 11:10
就是为了写这个,才开始学PY,这是写的第一个工具,代码有点混乱
我说的是代码颜色之类的,你试试用论坛的代码框处理一下,重新编辑。 Hmily 发表于 2022-3-24 11:12
我说的是代码颜色之类的,你试试用论坛的代码框处理一下,重新编辑。
改了,谢谢指点:lol yidaiyeer757 发表于 2022-3-24 11:16
改了,谢谢指点
你咋用的code,咋不用系统界面上的了,我给你改了下。 这个可以有,用的肯定不在少数! sjklmzc 发表于 2022-3-24 12:07
这个可以有,用的肯定不在少数!
是的,不用切换界面,也不用手动去复制,。然后我又做了一个自动填进相应位置,粘贴都省了{:1_927:}
页:
[1]