基于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读写Excel文件方法介绍
Nov 22 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
用Python设计一个经典小游戏
May 15 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
python实现K最近邻算法
Jan 29 Python
python3实现逐字输出的方法
Jan 23 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
Python实现中英文全文搜索的示例
Dec 04 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
Python性能优化技巧
2015/03/09 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
python中requests和https使用简单示例
2018/01/18 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
大学生求职推荐信
2013/11/27 职场文书
《夸父追日》教学反思
2014/02/26 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
课程改革实施方案
2014/03/16 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
中层干部考核评语
2015/01/04 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
护士旷工检讨书
2015/08/15 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
详解Javascript实践中的命令模式
2021/05/05 Javascript
如何自己动手写SQL执行引擎
2021/06/02 MySQL
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
HTML+JS实现在线朗读器
2022/02/15 Javascript
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers