基于PyQT5制作一个桌面摸鱼工具


Posted in Python onFebruary 15, 2022

前言

现在我能一整天都严肃地盯着屏幕,看起来就像在很认真地工作,

利用摸鱼,打开小说,可实行完美摸鱼,实时保存进度

用PYQT5 Mock一个摸鱼软件 类似于Thief

按键功能控制

q 退出

B 书签功能

F 增加字体大小

Shift F 减小字体

O 打开文件,现在仅仅支持 utf8格式的txt文件

主要功能

FlameLess Window 无边框窗口

一键快速退出

ini 文件读写

右键上下文菜单

核心代码

pyqt 实现功能还是比较顺畅的,总体功能实现代码量不到200行

from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
import sys,os
import configparser

# Q to quit app
# B Bookmark 
# F increase Font size 
# Shift F decrease Font size
# O Open *.txt file

class FisherReader(QMainWindow):
	def __init__(self):
		super().__init__()
		
		# drag
		self.pos =[0,0]
		self.mouse_down = False
		self.down = [0,0]
		self.prev = [0,0]
		# text
		self.txtName = ''
		self.text = []
		self.index = 0
		# style
		self.show_info = False
		self.font_size = 8
		self.bgColor = QColor(255,255,255)
		self.defPalette()
		# self.read_Txt()

	def mousePressEvent(self, event):
		current = [event.pos().x(),event.pos().y()]
		self.down = current
		self.mouse_down = True

	def mouseMoveEvent(self,event):
		current = [event.pos().x(),event.pos().y()]
		if self.mouse_down:
			delta = [current[0]-self.down[0],current[1]-self.down[1]]
			new = [self.pos[0]+delta[0],self.pos[1]+delta[1]]
			self.move(new[0],new[1])
			self.pos = new
			# print(self.pos)
			self.prev = current

	def mouseReleaseEvent(self, event):
		self.mouse_down = False

	def keyPressEvent(self,event):
		if event.key() == Qt.Key_Q:
			app.quit()
		if event.key() == Qt.Key_Down:
			if self.index < len(self.text)-1:
				self.index = self.index+1
				self.update()
		if event.key() == Qt.Key_Up:
			if self.index > 0:
				self.index = self.index-1
				self.update()
		if event.key() == Qt.Key_F:
			if event.modifiers() & QtCore.Qt.ShiftModifier and self.font_size >2:
				self.font_size -= 2
			else:
				self.font_size += 2
			self.update()
		if event.key() == Qt.Key_I:
			self.show_info = not self.show_info
			self.update()
		if event.key() == Qt.Key_O:
			self.open()
			self.update()
		if event.key() == Qt.Key_B:
			self.addBookmark()
		if event.key() == Qt.Key_R:
			self.getBookmark()
			

	def defPalette(self):
		p = self.palette()
		p.setColor(QPalette.Background,self.bgColor)
		self.window().setPalette(p)

	def paintEvent(self,event):
		painter = QPainter(self)
		painter.setRenderHints(QPainter.Antialiasing)
		if len(self.text)>0:
			painter.setFont(QFont('SimSun',self.font_size))
			painter.drawText(QtCore.QRectF(10,10,600,50),Qt.AlignLeft,self.text[self.index])

			if self.show_info:
				painter.drawText(QtCore.QRectF(610,10,50,50),Qt.AlignLeft,"{}/{}".format(self.index+1,len(self.text)))

	def open(self):
		path, _ = QFileDialog.getOpenFileName(self, "打开文件",os.getcwd(), "Text files (*.txt)")

		if path:
			self.txtName = path
			self.read_Txt_smart(path)
			self.update()

	def read_Txt(self,file):
		with open(file,'r',encoding="UTF-8") as f:
			self.text = f.readlines()

	def cut(self,text,length):
		return [text[i:i+length] for i in range(0,len(text),length)]

	def wheelEvent(self, e):
		if e.angleDelta().y() < 0:
			if self.index < len(self.text)-1:
				self.index = self.index+1
		elif e.angleDelta().y() > 0:
			if self.index > 0:
				self.index = self.index-1
		self.update()  

	def addBookmark(self):
		config = configparser.ConfigParser()
		path = "bookmark.ini"

		config.add_section('bookmark')
		config.set('bookmark','path',self.txtName)
		config.set('bookmark','bookmark',str(self.index))
		config.write(open(path,'w'))

	def getBookmark(self):
		config = configparser.ConfigParser()
		path = "bookmark.ini"
		config.read(path)

		if config.has_option('bookmark','path'):
			self.txtName = config.get('bookmark','path')
			self.index = int(config.get('bookmark','bookmark'))
			self.read_Txt_smart(self.txtName);
			self.update()


	def read_Txt_smart(self,file):
		with open(file,'r',encoding="UTF-8") as f:
			text_buffer = []
			lines = f.readlines()
			for line in lines:
				cline = self.cut(line,30)
				for cl in cline:
					if len(cl)>1:
						text_buffer.append(cl)
			self.text = text_buffer

if __name__ == '__main__':
	app = QApplication(sys.argv)
	fisher = FisherReader()
	fisher.resize(660,45)
	fisher.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint)
	fisher.show()
	fisher.setWindowTitle("小鱼")
	sys.exit(app.exec_())

到此这篇关于基于PyQT5制作一个桌面摸鱼工具的文章就介绍到这了,更多相关PyQT5桌面摸鱼工具内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python探索之自定义实现线程池
Oct 27 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
让Django支持Sql Server作后端数据库的方法
May 29 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
如何利用python读取micaps文件详解
Oct 18 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
python tkinter模块的简单使用
Apr 07 Python
python接口测试返回数据为字典取值方式
Feb 12 #Python
Python socket如何解析HTTP请求内容
Feb 12 #Python
python全面解析接口返回数据
Feb 12 #Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 #Python
python中出现invalid syntax报错的几种原因分析
Feb 12 #Python
python ConfigParser库的使用及遇到的坑
Feb 12 #Python
Python制作春联的示例代码
Jan 22 #Python
You might like
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
Python多进程机制实例详解
2015/07/02 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
python梯度下降法的简单示例
2018/08/31 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
python和js交互调用的方法
2020/06/23 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
运动会广播稿400字
2014/01/25 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
创业融资计划书
2014/04/25 职场文书
党员自我评价范文2015
2015/03/03 职场文书
2015年质检工作总结
2015/05/04 职场文书
用人单位聘用意向书
2015/05/11 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
青岛市的收音机研制与生产
2022/04/07 无线电