基于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中获取网页状态码的两个方法
Nov 03 Python
python创建关联数组(字典)的方法
May 04 Python
Python运算符重载详解及实例代码
Mar 07 Python
详解Python函数式编程—高阶函数
Mar 29 Python
python实现简单日期工具类
Apr 24 Python
使用Python进行防病毒免杀解析
Dec 13 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
python3 xpath和requests应用详解
Mar 06 Python
django 将自带的数据库sqlite3改成mysql实例
Jul 09 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 Python
python数字图像处理:图像的绘制
Jun 28 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 更新数据库中断的解决方法
2009/06/05 PHP
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
详解PHP PDO简单教程
2019/05/28 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
vue中过滤器filter的讲解
2019/01/21 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
Python正则表达式使用经典实例
2016/06/21 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
一套带网友答案的.NET笔试题
2016/12/06 面试题
医学护理系毕业生求职信
2013/10/01 职场文书
数控专业应届生求职信
2013/11/27 职场文书
施工班组长岗位职责
2014/01/05 职场文书
推荐信模板
2014/05/09 职场文书
环保宣传标语
2014/06/12 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
一文搞懂php的垃圾回收机制
2021/06/18 PHP
索尼ICF-5900W收音机测评
2022/04/24 无线电