基于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使用PIL缩放网络图片并保存的方法
Apr 24 Python
Python解惑之整数比较详解
Apr 24 Python
用pickle存储Python的原生对象方法
Apr 28 Python
python验证码识别的示例代码
Sep 21 Python
详解Python核心对象类型字符串
Feb 11 Python
python实现文本界面网络聊天室
Dec 12 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
如何使用python socket模块实现简单的文件下载
Sep 04 Python
python如何利用Mitmproxy抓包
Oct 10 Python
10个示例带你掌握python中的元组
Nov 23 Python
pycharm无法导入lxml的解决办法
Mar 31 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
PHP学习 运算符与运算符优先级
2008/06/15 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
Javascript常考语句107条收集
2010/03/09 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
使用python实现链表操作
2018/01/26 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
PyTorch基本数据类型(一)
2019/05/22 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
商场端午节活动方案
2014/01/29 职场文书
董事长助理工作职责
2014/06/08 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
运动会广播稿100字
2014/09/14 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
六五普法宣传标语
2014/10/06 职场文书
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫